Je me demande s’il faut utiliser des parameters de masortingce ou de requête dans mes URL. J’ai trouvé une discussion plus ancienne sur ce sujet non satisfaisante.
Exemples
À première vue, les parameters de la masortingce ne semblent avoir que des avantages:
paramA=val1,val2
Mais il y a aussi des inconvénients:
Comme le développeur du service peut choisir une structure avec prise en charge de la masortingce, le seul inconvénient rest que les navigateurs créent des parameters de requête par défaut.
Y a-t-il d’autres inconvénients? Qu’est-ce que tu ferais?
La différence importante est que les parameters de la masortingce s’appliquent à un élément de chemin particulier, tandis que les parameters de requête s’appliquent à la requête dans son ensemble. Cela entre en jeu lorsque vous effectuez une requête complexe de type REST sur plusieurs niveaux de ressources et de sous-ressources:
http://example.com/res/categories;name=foo/objects;name=green/?page=1
Cela revient vraiment à l’espace de noms. Si seuls les parameters de la requête étaient utilisés, vous obtiendriez des parameters tels que “category_name” et “object_name” et vous perdriez la clarté ajoutée par la localité des parameters dans la requête. De plus, lorsque vous utilisez un framework tel que JAX-RS, tous les parameters de requête apparaissent dans chaque gestionnaire de ressources, ce qui peut entraîner des conflits et de la confusion.
Si votre requête n’a qu’un seul “niveau”, la différence n’est pas vraiment importante et les deux types de parameters sont effectivement interchangeables. Cependant, les parameters de requête sont généralement mieux pris en charge et plus largement reconnus. En général, je vous recommande de respecter les parameters de requête pour des éléments tels que les formulaires HTML et les API HTTP simples à un seul niveau.
–Il est important d’être relégué pour commenter la section .–
Je ne suis pas sûr du problème avec les URL masortingcielles. Selon l’article de conception de w3c écrit par TBL, ce n’était qu’une idée de conception et déclare explicitement que ce n’est pas une caractéristique du Web. Des choses comme les URL relatives ne sont pas implémentées lors de son utilisation. Si vous voulez l’utiliser, c’est bien; il n’y a pas de méthode standard pour l’utiliser car ce n’est pas une norme. – Steve Pomeroy
Si la réponse est courte, si vous avez besoin de RS à des fins commerciales, il vaut mieux utiliser le paramètre de requête.
En plus de la réponse de Tim Sylvester, j’aimerais donner un exemple de la façon dont les parameters de la masortingce peuvent être gérés avec JAX-RS .
Paramètres Matix au dernier élément de ressource
http://localhost:8080/res/categories/objects;name=green
Vous pouvez y accéder à l’aide de l’annotation @MasortingxParam
@GET @Path("categories/objects") public Ssortingng objects(@MasortingxParam("name") Ssortingng objectName) { return objectName; }
Réponse
green
Mais comme les états de javadoc
Notez que la valeur d’annotation
@MasortingxParam
fait référence à un nom de paramètre de masortingce qui réside dans le dernier segment de chemin d’access correspondant de la structure Java annotée par chemin qui injecte la valeur du paramètre masortingx.
… ce qui nous amène au point 2
Paramètres de la masortingce au milieu d’une URL
http://localhost:8080/res/categories;name=foo/objects;name=green
Vous pouvez accéder aux parameters de la masortingce n’importe où en utilisant les variables de chemin et @PathParam
PathSegment
.
@GET @Path("{categoryVar:categories}/objects") public Ssortingng objectsByCatecory(@PathParam("categoryVar") PathSegment categorySegment, @MasortingxParam("name") Ssortingng objectName) { MultivaluedMap masortingxParameters = categorySegment.getMasortingxParameters(); Ssortingng categorySegmentPath = categorySegment.getPath(); Ssortingng ssortingng = Ssortingng.format("object %s, path:%s, masortingxParams:%s%n", objectName, categorySegmentPath, masortingxParameters); return ssortingng; }
Réponse
object green, path:categories, masortingxParams:[name=foo]
Étant donné que les parameters de la masortingce sont fournis sous forme de MultivaluedMap
à MultivaluedMap
vous pouvez accéder à chacun d’eux par
List names = masortingxParameters.get("name");
ou si vous avez seulement besoin du premier
Ssortingng name = masortingxParameters.getFirst("name");
Obtenir tous les parameters de la masortingce en tant que paramètre de méthode unique
http://localhost:8080/res/categories;name=foo/objects;name=green//atsortingbutes;name=size
Utilisez une List
pour les obtenir tous
@GET @Path("all/{var:.+}") public Ssortingng allSegments(@PathParam("var") List pathSegments) { SsortingngBuilder sb = new SsortingngBuilder(); for (PathSegment pathSegment : pathSegments) { sb.append("path: "); sb.append(pathSegment.getPath()); sb.append(", masortingx parameters "); sb.append(pathSegment.getMasortingxParameters()); sb.append("
"); } return sb.toSsortingng(); }
Réponse
path: categories, masortingx parameters [name=foo] path: objects, masortingx parameters [name=green] path: atsortingbutes, masortingx parameters [name=size]