URL de la matrice des paramètres vs les paramètres de la demande
Je me demandais si l'utilisation de la matrice ou des paramètres de requête dans mon Url. J'ai trouvé une vieille discussion sur le sujet, pas satisfaisant.
Exemples
- URL de requête params: http://some.where/thing?paramA=1¶mB=6542
- URL avec la matrice params: http://some.where/thing;paramA=1;paramB=6542
À première vue matrice params semble avoir que des avantages:
- plus lisible
- pas de codage et de décodage de "&" dans des documents XML est nécessaire
- Url avec des "?" ne sont pas mis en cache dans de nombreux cas, les Url avec la matrice params sont mis en cache
- paramètres de matrice peuvent apparaître partout dans le chemin d'accès et ne sont pas limités à sa fin
- paramètres de matrice peut avoir plus d'une valeur:
paramA=val1,val2
Mais il y a aussi des inconvénients:
- seulement quelques cadres comme JAX-RS matrice de prise en charge des paramètres de
- Lorsqu'un navigateur envoie un formulaire via GET, les paramètres devenir requête params. Donc, il se retrouve dans les deux types de paramètres pour la même tâche. Pour ne pas dérouter les utilisateurs des services REST et de limiter l'effort pour les développeurs de services, il serait plus facile à utiliser toujours requête params dans ce domaine.
Depuis le développeur du service pouvez choisir un cadre avec la matrice des param soutien, le seul inconvénient serait que les navigateurs crée par défaut des paramètres de requête.
Existe-il d'autres inconvénients? Que feriez-vous?
- Je ne suis pas sûr de ce qu'est l'affaire avec de la matrice Url. Selon le w3c, la conception de l'article que VLB a écrit, c'était juste une idée de conception et indique explicitement que ce n'est pas une caractéristique du web. Des choses comme les Url relatives ne sont pas mis en œuvre lors de son utilisation. Si vous voulez l'utiliser, c'est très bien; il n'y a juste pas de manière standard à l'utiliser car il n'est pas un standard.
- Pomeroy: Est-ce que l'article que vous mentionnez: w3.org/DesignIssues/MatrixURIs.html
- yup. Pour ceux qui pensent à propos de la matrice Url, note le "Statut: point de vue personnel" en haut du document.
- pouvez matrice params ont plus qu'une valeur? vraiment?
Vous devez vous connecter pour publier un commentaire.
La différence importante est que la matrice de paramètres s'appliquent à un élément du chemin, tandis que les paramètres de la requête s'appliquent à la demande dans son ensemble. Ceci entre dans le jeu lors de la prise d'un complexe de style REST requête à de multiples niveaux de ressources et de sous-ressources:
Il s'agit vraiment de namespacing. Si seulement les paramètres de la requête ont été utilisés, vous vous retrouvez avec des paramètres comme "category_name" et "object_name" et vous perdrez la clarté ajouté par la localité de paramètres au sein de la demande. En outre, lors de l'utilisation d'un framework comme JAX-RS, tous les paramètres de la requête serait en place à l'intérieur de chaque gestionnaire de ressources, conduisant à des conflits potentiels et de la confusion.
Si votre requête n'a qu'un seul "niveau", la différence n'est pas vraiment important, et les deux types de paramètres sont effectivement interchangeables, cependant les paramètres de la requête sont généralement un meilleur soutien et plus largement reconnu. En général, je recommande que vous vous en tenez à des paramètres de requête pour des choses comme les formulaires HTML et simple à un seul niveau Api HTTP.
/?
partie de la représentation d'une ressource??
commence le paramètre de requête de la partie de la demande. Les paramètres de la requête sont le type le plus commun de paramètres d'URL, par opposition aux paramètres de matrice. La barre oblique avant le point d'interrogation permet de s'assurer que le paramètre de requêtepage
ne pas exécuter dans la matrice de paramètres qui précède la barre oblique. Je suppose que si il n'y avait pas de matrice de paramètres attachés àcategories
, les paramètres de la requête pourrait attachée sans le slash comme ceci:http://example.com/res/categories?page=1
--Trop important pour être relégué à la section des commentaires.--
Je ne suis pas sûr de ce qu'est l'affaire avec de la matrice Url. Selon le w3c, la conception de l'article que VLB a écrit, c'était juste une idée de conception et indique explicitement que ce n'est pas une caractéristique du web. Des choses comme les Url relatives ne sont pas mis en œuvre lors de son utilisation. Si vous voulez l'utiliser, c'est très bien; il n'y a juste pas de manière standard à l'utiliser car il n'est pas un standard. – Steve Pomeroy
Donc bref, si vous avez besoin RS pour objectif d'affaires, vous êtes mieux à l'aide du paramètre de la requête.
En plus de Tim Sylvester réponse que je voudrais donner un exemple de comment la matrice des paramètres peuvent être traitées avec JAX-RS .
Paramètres de matrice à la dernière ressource de l'élément de
Vous pouvez y accéder en utilisant le
@MatrixParam
annotationRéponse
Mais comme la Javadoc états
... ce qui nous amène au point 2
Paramètres de matrice au moyen d'une URL
Vous pouvez accéder aux paramètres de matrice de n'importe où à l'aide de variables de chemin d'accès et
@PathParam
PathSegment
.Réponse
Depuis les paramètres de la matrice sont fournis à titre
MultivaluedMap
vous pouvez accéder à chaque parou si vous avez besoin seulement le premier
Obtenir tous les paramètres de matrice comme un paramètre de méthode
Utiliser un
List<PathSegment>
pour obtenir tous lesRéponse