¿Cuándo utilizar parámetros de consulta frente a parámetros de matriz?

90

Parámetros de consulta :http://example.com/apples?order=random&color=blue

Parámetros de la matriz :http://example.com/apples;order=random;color=blue

  1. ¿Cuándo se deben usar los parámetros de consulta frente a los parámetros de la matriz?
  2. ¿Por qué se pueden usar parámetros de matriz en medio de una URL pero no los parámetros de consulta? Por ejemplo:http://example.com/apples;order=random;color=blue/2006/archive
  3. Si los parámetros de la matriz son un superconjunto de parámetros de consulta, ¿por qué no utilizarlos todo el tiempo?

Puede leer más sobre los parámetros de la matriz aquí: http://www.w3.org/DesignIssues/MatrixURIs.html

Gili
fuente

Respuestas:

110

Las diferencias entre los parámetros de matriz y los parámetros de consulta son mucho más que una simple convención.

Las principales diferencias son:

  • Las URL con parámetros de consulta no tendrán su respuesta almacenada en caché por intermediarios / proxies (en la actualidad)
  • los parámetros de la matriz pueden aparecer en cualquier lugar de la ruta
  • calcular el uri relativo es diferente
  • Los parámetros de consulta generalmente se abusan para agregar nuevos verbos en lugar de usar métodos existentes en los recursos.
  • Los parámetros matriciales no son recursos, son aspectos que ayudan a referenciar un recurso en un espacio de información que es difícil de representar dentro de una jerarquía.
  • Lo he escrito con más detalle y con más referencias en Query vs. Matrix Parameters

    bdargan
    fuente
    4
    "Las URL con parámetros de consulta no tendrán su respuesta almacenada en caché por intermediarios / proxies". ¿No es esto una cuestión puramente específica de la implementación? No veo nada en el estándar HTTP que requiera este comportamiento ...
    Gili
    1
    En resumen: si lo que dice es cierto, ¿por qué no migraría todos los parámetros de consulta a parámetros de matriz?
    Gili
    2
    @Gili nunca dijo que el comportamiento sea un mandato de HTTP. de su artículo: "Los intermediarios (proxies) no almacenarán en caché ninguna URL con un parámetro de consulta en la URL. Esto se debe a que en los primeros días de la web, no confiaban en la información de control de caché de las páginas generadas dinámicamente". Las especificaciones y la práctica del mundo real a veces (o en la mayoría de los casos) difieren.
    Hendy Irawan
    6
    Esta respuesta es incorrecta en 3/5. La diferencia con respecto a los URI relativos y la capacidad de incrustar parámetros en medio de una ruta son verdaderas. Todos los demás puntos son incorrectos, ya que los parámetros de la matriz tendrán exactamente el mismo problema una vez que se vuelvan más populares, por lo que no son diferentes de los parámetros de consulta en ese sentido.
    Gili
    3
    Los parámetros de consulta de @Gill son útiles para definir criterios opcionales. Los parámetros de la matriz son información complementaria a la variable de ruta. Vea esta consulta de URL: localhost / services / api /… matrix: localhost / services / api / movies / actor; name? Limit = 10 Tiene más sentido cuando se usa como matriz sobre consulta. Esta URL prueba el punto 5 de bdargan.
    skipy