Me pregunto si usar parámetros de matriz o consulta en mis URL. Encontré una discusión anterior sobre ese tema no satisfactoria.
Ejemplos
- URL con parámetros de consulta: http: //some.where/thing? ParamA = 1 & paramB = 6542
- URL con parámetros de matriz: http: //some.where/thing; paramA = 1; paramB = 6542
A primera vista, los parámetros de matriz parecen tener solo ventajas:
- más legible
- no se requiere codificación ni decodificación de "&" en documentos XML
- URL con "?" no se almacenan en caché en muchos casos; Las URL con parámetros de matriz se almacenan en caché
- los parámetros de la matriz pueden aparecer en todas partes en la ruta y no se limitan a su final
- Los parámetros de la matriz pueden tener más de un valor:
paramA=val1,val2
Pero también hay desventajas:
- solo unos pocos marcos como JAX-RS admiten parámetros de matriz
- Cuando un navegador envía un formulario a través de GET, los parámetros se convierten en parámetros de consulta. Por lo tanto, termina en dos tipos de parámetros para la misma tarea. Para no confundir a los usuarios de los servicios REST y limitar el esfuerzo para los desarrolladores de los servicios, sería más fácil usar siempre parámetros de consulta, en esta área.
Dado que el desarrollador del servicio puede elegir un marco con soporte de matriz de parámetros, la única desventaja restante sería que los navegadores crean por defecto los parámetros de consulta.
¿Hay alguna otra desventaja? ¿Qué harías?
Respuestas:
La diferencia importante es que los parámetros de la matriz se aplican a un elemento de ruta particular, mientras que los parámetros de consulta se aplican a la solicitud como un todo. Esto entra en juego cuando se realiza una consulta compleja de estilo REST a múltiples niveles de recursos y subrecursos:
Realmente se reduce al espacio de nombres.
Nota: Los 'niveles' de recursos aquí son
categories
yobjects
.Si solo se usaran parámetros de consulta para una URL de varios niveles, terminaría con
De esta manera, también perdería la claridad agregada por la localidad de los parámetros dentro de la solicitud. Además, cuando se utiliza un marco como JAX-RS, todos los parámetros de consulta aparecerían dentro de cada manejador de recursos, lo que generaría conflictos y confusión potenciales.
Si su consulta tiene solo un "nivel", entonces la diferencia no es realmente importante y los dos tipos de parámetros son efectivamente intercambiables, sin embargo, los parámetros de consulta generalmente son mejor soportados y más ampliamente reconocidos. En general, le recomendaría que se apegue a los parámetros de consulta para cosas como formularios HTML y API HTTP simples de un solo nivel.
fuente
/?
parte representa un recurso??
inicia el parámetro de consulta parte de la solicitud. Los parámetros de consulta son el tipo más común de parámetros de URL, a diferencia de los parámetros de matriz. La barra diagonal antes del signo de interrogación asegura que el parámetro de consultapage
no se ejecute en el parámetro de matriz que precede a la barra diagonal. Supongo que si no hubiera parámetros de matriz adjuntoscategories
, los parámetros de consulta podrían adjuntarse sin la barra como esta:http://example.com/res/categories?page=1
Además de la respuesta de Tim Sylvester, me gustaría proporcionar un ejemplo de cómo se pueden manejar los parámetros de la matriz con JAX-RS .
Parámetros matriciales en el último elemento de recurso
Puedes acceder a ellos usando la
@MatrixParam
anotaciónRespuesta
Pero como los estados de Javadoc
... lo que nos lleva al punto 2
Parámetros de matriz en el medio de una URL
Puede acceder a los parámetros de la matriz en cualquier lugar utilizando variables de ruta y
@PathParam
PathSegment
.Respuesta
Como los parámetros de la matriz se proporcionan como un
MultivaluedMap
, puede acceder a cada uno de ellos medianteo si solo necesitas el primero
Obtenga todos los parámetros de la matriz como un parámetro de método
Usa a
List<PathSegment>
para conseguirlos a todosRespuesta
fuente
Demasiado importante para ser relegado a la sección de comentarios.
No estoy seguro de cuál es el gran problema con las URL de matriz. Según el artículo de diseño de w3c que escribió TBL, era solo una idea de diseño y afirma explícitamente que no es una característica de la web. Cosas como las URL relativas no se implementan al usarlo. Si quieres usarlo, está bien; simplemente no hay una forma estándar de usarlo porque no es un estándar. - Steve Pomeroy
Entonces, la respuesta corta es, si necesita RS para fines comerciales, es mejor que use el parámetro de solicitud.
fuente