De Wikipedia: Localizador uniforme de recursos
Una ruta , que contiene datos, generalmente organizada en forma jerárquica. , que aparece como una secuencia de segmentos separados por barras.
Una consulta opcional , separada de la parte anterior por un signo de interrogación (?), Que contiene una cadena de consulta de datos no jerárquicos .
- De acuerdo con el diseño conceptual de la URL, podríamos implementar un PathParam para datos jerárquicos / directivas / componentes de localización, o implementar un QueryParam cuando los datos no son jerárquicos. Esto tiene sentido porque las rutas están naturalmente ordenadas, mientras que las consultas contienen variables que pueden ordenarse arbitrariamente (pares de variables / valores desordenados).
Un comentarista anterior escribió:
Creo que si el parámetro identifica una entidad específica, debe usar una variable de ruta.
Otro escribió:
Use @PathParam para la recuperación basada en la identificación. Usuario @QueryParam para el filtro o si tiene alguna lista fija de opciones que el usuario pueda pasar.
Otro,
Recomiendo poner cualquier parámetro requerido en la ruta, y cualquier parámetro opcional ciertamente debería ser un parámetro de cadena de consulta.
- Sin embargo, ¡uno podría implementar un sistema flexible y no jerárquico para identificar entidades específicas! ¡Uno podría tener múltiples índices únicos en una tabla SQL y permitir que se identifiquen entidades usando cualquier combinación de campos que comprenda un índice único! Se pueden usar diferentes combinaciones (quizás también ordenadas de manera diferente) para enlaces de varias entidades relacionadas (referentes). En este caso, podríamos estar tratando con datos no jerárquicos, utilizados para identificar entidades individuales, o en otros casos, solo podríamos especificar ciertas variables / campos, ciertos componentes de índices únicos, y recuperar una lista / conjunto de registros. En tales casos, podría ser más fácil, más lógico y razonable implementar las URL como QueryParams.
¿Podría una cadena hexadecimal larga diluir / disminuir el valor de las palabras clave en el resto de la ruta? Puede valer la pena la considerar las posibles implicaciones de SEO de colocar variables / valores en la ruta o en la consulta, y las implicaciones de la interfaz humana de si queremos que los usuarios puedan atravesar / explorar la jerarquía de las URL editando el contenido de la barra de direcciones. ¡Mi página 404 No encontrado utiliza variables SSI para redirigir automáticamente las URL rotas a sus padres! Los robots de búsqueda también pueden atravesar la jerarquía de rutas. Por otro lado, personalmente, cuando comparto URL en las redes sociales, elimino manualmente todos los identificadores únicos privados, generalmente truncando la consulta de la URL, dejando solo la ruta: en este caso, hay alguna utilidad para colocar identificadores únicos en la ruta en lugar de en la consulta. Si queremos facilitar el uso de componentes de ruta como una interfaz de usuario en bruto, tal vez depende de si los datos / componentes son legibles por humanos o no. La cuestión de la legibilidad humana se relaciona un poco con la cuestión de la jerarquía: a menudo, los datos que pueden expresarse como palabras clave legibles por humanos también son jerárquicos; mientras que los datos jerárquicos a menudo se pueden expresar como palabras clave legibles por humanos. (Los propios motores de búsqueda pueden definirse como un aumento del uso de URL como interfaz de usuario). Las jerarquías de palabras clave o directivas pueden no estar estrictamente ordenadas, pero generalmente son lo suficientemente cercanas como para que podamos cubrir casos alternativos en el camino, yetiquete una opción como el caso "canónico" .
Hay fundamentalmente varios tipos de preguntas que podemos responder con la URL para cada solicitud:
- ¿Qué tipo de registro / cosa estamos solicitando / sirviendo?
- ¿En cuál (es) estamos interesados?
- ¿Cómo queremos presentar la información / registros?
Es casi seguro que la Q1 está mejor cubierta por la ruta o por PathParams. Q3 (que probablemente se controla mediante un conjunto de parámetros opcionales ordenados arbitrariamente y valores predeterminados); es casi seguro que mejor cubierto por QueryParams. P2: Depende ...