Quand utiliser les paramètres de requête par rapport aux paramètres de matrice?

90

Paramètres de requête :http://example.com/apples?order=random&color=blue

Paramètres de la matrice :http://example.com/apples;order=random;color=blue

  1. Quand faut-il utiliser les paramètres de requête par rapport aux paramètres de matrice?
  2. Pourquoi les paramètres de matrice peuvent-ils être utilisés au milieu d'une URL mais pas les paramètres de requête? Par exemple:http://example.com/apples;order=random;color=blue/2006/archive
  3. Si les paramètres de matrice sont un sur-ensemble de paramètres de requête, pourquoi ne pas les utiliser tout le temps?

Vous pouvez en savoir plus sur les paramètres de matrice ici: http://www.w3.org/DesignIssues/MatrixURIs.html

Gili
la source

Réponses:

110

Les différences entre les paramètres de matrice et les paramètres de requête sont bien plus qu'une simple convention.

Les principales différences sont:

  • les URL avec des paramètres de requête ne verront pas leur réponse mise en cache par des intermédiaires / proxies (pour le moment)
  • les paramètres de la matrice peuvent apparaître n'importe où dans le chemin
  • le calcul de l'URI relatif est différent
  • les paramètres de requête sont généralement utilisés de manière abusive pour ajouter de nouveaux verbes au lieu d'utiliser des méthodes existantes sur les ressources
  • les paramètres de la matrice ne sont pas des ressources, ce sont des aspects qui aident à référencer une ressource dans un espace d'informations difficile à représenter dans une hiérarchie
  • Je l'ai écrit plus en détail et avec plus de références dans les paramètres de requête et de matrice

    bdargan
    la source
    4
    "les URL avec des paramètres de requête ne verront pas leur réponse mise en cache par les intermédiaires / mandataires". N'est-ce pas purement une chose spécifique à la mise en œuvre? Je ne vois rien dans la norme HTTP qui appelle à ce comportement ...
    Gili
    1
    En résumé: si ce que vous dites est vrai, pourquoi ne migreriez-vous pas tous les paramètres de requête vers des paramètres de matrice?
    Gili
    2
    @Gili, il n'a jamais dit que le comportement était mandaté par HTTP. de son article: "Les intermédiaires (proxies) ne mettront en cache aucune URL avec un paramètre de requête dans l'URL. C'est parce que dans les premiers jours du Web, ils ne faisaient pas confiance aux informations de contrôle du cache à partir de pages générées dynamiquement." Les spécifications et la pratique du monde réel diffèrent parfois (ou dans la plupart des cas).
    Hendy Irawan le
    6
    Cette réponse est erronée aux 3 / 5ème. La différence par rapport aux URI relatifs et à la possibilité d'incorporer des paramètres au milieu d'un chemin est vraie. Tous les autres points sont faux, en ce sens que les paramètres de matrice auront exactement le même problème une fois qu'ils deviendront plus populaires afin qu'ils ne soient pas différents des paramètres de requête à cet égard.
    Gili
    3
    Les paramètres de requête @Gill sont utiles pour définir des critères facultatifs. Les paramètres de matrice sont des informations supplémentaires à la variable de chemin. Voir cette requête URL: localhost / services / api /… matrice: localhost / services / api / films / acteur; nom? Limit = 10 A plus de sens lorsqu'il est utilisé comme matrice sur requête. Cette URL prouve le point 5 de bdargan.
    skipy