Quando usar parâmetros de consulta versus parâmetros de matriz?

90

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

Parâmetros da matriz :http://example.com/apples;order=random;color=blue

  1. Quando se deve usar parâmetros de consulta em vez de parâmetros de matriz?
  2. Por que os parâmetros da matriz podem ser usados ​​no meio de um URL, mas os parâmetros de consulta não? Por exemplo:http://example.com/apples;order=random;color=blue/2006/archive
  3. Se os parâmetros de matriz são um superconjunto de parâmetros de consulta, por que não usá-los o tempo todo?

Você pode ler mais sobre os parâmetros da matriz aqui: http://www.w3.org/DesignIssues/MatrixURIs.html

Gili
fonte

Respostas:

110

As diferenças entre os parâmetros Matrix e os Parâmetros de consulta são muito mais do que apenas uma convenção.

As principais diferenças são:

  • urls com parâmetros de consulta não terão suas respostas armazenadas em cache por intermediários / proxies (no momento)
  • os parâmetros da matriz podem aparecer em qualquer lugar no caminho
  • calcular o uri relativo é diferente
  • os parâmetros de consulta são geralmente usados ​​para adicionar novos verbos em vez de usar métodos existentes nos recursos
  • os parâmetros da matriz não são recursos, são aspectos que ajudam a referenciar um recurso em um espaço de informação que é difícil de representar dentro de uma hierarquia
  • Eu escrevi com mais detalhes e com mais referências em Query vs. Matrix Parameters

    bdargan
    fonte
    4
    "urls com parâmetros de consulta não terão suas respostas armazenadas em cache por intermediários / proxies". Isso não é puramente uma coisa específica da implementação? Não vejo nada no padrão HTTP que exija este comportamento ...
    Gili
    1
    Em resumo: se o que você diz é verdade, por que você não migraria todos os parâmetros de consulta para parâmetros de matriz?
    Gili
    2
    @Gili ele nunca disse que o comportamento é comandado por HTTP. de seu artigo: "Intermediários (proxies) não armazenam em cache nenhuma url com um parâmetro de consulta na url. Isso ocorre porque, nos primeiros dias da web, eles não confiavam nas informações de controle de cache de páginas geradas dinamicamente." As especificações e a prática do mundo real às vezes (ou na maioria dos casos) diferem.
    Hendy Irawan,
    6
    Esta resposta está 3/5 errada. A diferença em relação aos URIs relativos e a capacidade de incorporar parâmetros no meio de um caminho são verdadeiras. Todos os outros pontos estão errados, pois os parâmetros de matriz terão exatamente o mesmo problema quando se tornarem mais populares, de modo que não sejam diferentes dos parâmetros de consulta nesse aspecto.
    Gili
    3
    Os parâmetros de consulta @Gill são úteis na definição de parâmetros de matriz de critérios opcionais são informações complementares para a variável de caminho. Veja esta consulta de URL: localhost / services / api /… matrix: localhost / services / api / movies / actor; name? Limit = 10 Faz mais sentido quando usado como matriz sobre a consulta. Este URL prova o ponto 5 de bdargan.
    skipy 01 de