2009-02-23 8 views
11

Tengo una aplicación web RESTful que admite múltiples campos de clasificación en una colección de elementos. ¿Existe una convención común para codificar estos campos de clasificación en la cadena de consulta de una URL? Estoy pensando en un patrón similar a la siguiente:Convención de cadena de consulta de URL para clasificación múltiple

http://myapp.com/books?sort=author:asc,datepublished:desc&count=12 

Esto ordenar la colección de libros de autor y luego por fecha de publicación.

Básicamente, necesito una forma conveniente para que los pares nombre-valor en mi cadena de consulta tengan pares de nombre-valor propios. También tendré que hacer algo similar al ejemplo anterior para los parámetros de filtro.

¿Rails o ASP.NET MVC tienen un patrón para esto? ¿Existen otros marcos que hayan establecido formas de abordar este problema? Prefiero usar un formato familiar que el mío.

También preferiría un formato que use la menor codificación de porcentaje de URL posible.

+0

Buena pregunta - Me he preguntado lo mismo. –

+0

Parece que estás haciendo un formato JSON-ish; lo cual evitaría porque alguien puede interpretarlo como JSON, en cuyo caso la noción de ordenar se pierde. –

+0

Buen punto, Tom. ¡Por eso estoy pidiendo comentarios! – dthrasher

Respuesta

9

He hecho esto antes de utilizar la sintaxis estándar de clasificación SQL. Existen numerosas funciones y técnicas de análisis por ahí.

http://myapp.com/books?sort=author asc,datepublished desc&count=12 

que se codifica a

http://myapp.com/books?sort=author+asc,datepublished+desc&count=12 
+1

Este es un buen camino a seguir, ya que también es compatible con Solr, un motor de búsqueda de código abierto ampliamente utilizado. – KenE

+0

+1, la lista de Comandos Plus es probablemente mejor que la lista Coma de Coma. –

+0

Simple. Me gusta. ¡Tenemos un ganador! – dthrasher

0

Evitaría usar GET como los parámetros. ¿Qué hay de esto:

http://myapp.com/books/sortedby/author:asc+datepublished:desc/count/12 

La idea es que si usted necesita para refinar la búsqueda de un recurso basado en un criterio, se agrega el nombre de la misma en la dirección URL, seguido por el valor del parámetro. Si necesita más de un valor de parámetro, sepárelos con un +.

Esto es lo que utiliza para Stackoverflow preguntas etiquetadas:

http://stackoverflow.com/questions/tagged/java+servlet 

embargo admito que añadir el recuento/12 al final parece un poco extraño, pero no puedo pensar en nada mejor.

+2

¿Cuál es la razón para evitar los parámetros de la cadena de consulta? Al contar, filtrar, clasificar, etc., en la propia URL me daría una gran cantidad de URL para tratar, y obligaría a las personas a recordar si ordenado viene antes de contar o viceversa. – dthrasher

0

¿Qué pasa con una versión totalmente compatible con PHP como éste:

http://myapp.com/books?sort[0][name]=author&sort[0][dir]=asc&sort[1][name]=datepublished&sort[1][dir]=desc&count=12 

un poco más largo pero mucho más conveniente y, como he dicho, compatible con PHP. ASP.NET podría haber implementado soporte para este formato también.

Esto creará una matriz, tipo, directamente donde cada elemento de la especie tiene un nombre y dir propiedad.

6

para el descanso, prefiero una sintaxis más intuitiva:

http://myapp.com/books?sort=+author,-datepublished&count=12

Y más elaborado (sin signo '+'):

http://myapp.com/books?sort=author,-datepublished&count=12

fácil de recordar ...

+0

¿Qué significa + y - significa? quiero decir lo que es asc y lo que desc. –

Cuestiones relacionadas