2009-01-30 18 views
10

¿Cómo diseñaría una consulta RESTful para admitir O operando entre parámetros? Digamos que mi recurso tiene dos campos field1 & field2. ¿Cómo diseñaría la URL para permitir la siguiente consulta:Diseño de URL RESTful: cómo consultar mediante O entre parámetros

"Obtener MyResources donde campo1 = X o campo2 = y"

consultas Diseñar en resto es bastante sencillo, pero sólo he visto las consultas que apoya y entre los campos de consulta. p.ej./Myresource campo1 = x & campo2 = y

Una posible solución puede ser para proporcionar un único parámetro de consulta con texto libre en la parte, por ejemplo:??

GET/myresource q = {campo1 = X o campo2 = y}

Pero eso haría más complicado para los clientes analizar y ampliar o reducir los campos filtrados.

¿Qué es lo que sugiere?

Respuesta

10

Los parámetros de consulta no están, por definición, relacionados, son parametros inertes, la forma de manejarlos depende de usted. Para una búsqueda O me gustaría sugerir:

GET /myresources?field1=x&field2=y&inclusive=true 

Si desea defecto en una relación AND (razonable), y cualquier otra extensión que desea es por supuesto posible.

2

Por lo que su valor, SO utiliza el siguiente formato para la búsqueda de preguntas con múltiples tags:

http://stackoverflow.com/questions/tagged?tagnames=jquery or css or asp.net or php or web-development or svn

Es perfectamente razonable para separarlos con , o ; suponiendo que esos no son caracteres válidos para las etiquetas sí mismos. Los motores de búsqueda suelen utilizar q=keyword1+keyword2 y codificar en la URL + en las palabras clave mismas, que es lo que yo sugeriría que haga si esto es para un URI de búsqueda.

1

Depende

si desea que su recurso a Allways puede acceder con condición1 O condition2 su puede simplemente tratarlos de esa manera ...

pero si usted quiere tener ambas posibilidades (utilizando AND y OR) tendrías que implementar algo como annakata dijo, un parámetro que indica cómo deben agregarse las condiciones a la consulta que ...

si quieres tener un enfoque más flexible (cond1 y cond2 o cond3) no veo otra opción pero implementando tu propia consulta con texto libre, como dijiste ...

Por otro lado, si siempre está consultando el mismo campo (que creo que no es el caso porque ha especificado campo1, campo2) puede usar el enfoque de allemb, y simplemente usar algún carácter ("," o ";") para separar los valores ...

personalmente, he desarrollado algún tipo de lenguaje de consulta micro, como

campo1 = valor1 ..val2 (campo1 entre val1 y val2) campo1 => val2 (campo1> val2) campo1 = val1; val2 (campo1 = val1 o campo1 = val2) filed1 = val1 (campo1 contiene val1)

campo1 = val1..val2 &> val3 (campo1 entre val1 y val2 y campo1> val3 ...

bueno, se entiende la idea

pero luego combinar con todas las condiciones y, por lo que este es solo un ejemplo ampliado de waht aleemb estaba diciendo ...

Cuestiones relacionadas