RESTE - OBTENEZ les meilleures pratiques pour les caractères spéciaux
Nous avons API REST. J'ai été à essayer de comprendre la meilleure façon de faire un Get avec certains caractères spéciaux.
Actuellement, nous avons quelque chose comme ceci: http://myhost.com/api/book/name=HarryPotter
L'URL ci-dessus fonctionne très bien, mais devient compliqué quand certains personnage sont inclus dans le queryparam comme "& "ou"/", ce qui aura pour résultat Aucune opération d'appariement demande de chemin ... est trouvé, la Méthode HTTP : GET, ContentType : /, Accepter : /,"
ex: http://myhost.com/api/book/name=Dark/Thirty.
Cela permettra d'envisager le '/' dans 'Dark Trente" comme une séparation d'URL.
Quelle est la meilleure pratique pour être en mesure de rechercher de telles requêtes. Est à l'aide d'un JSON une meilleure pratique, si oui dois-je utiliser un GET ou un POST? Je crois qu'il devrait être de POSTE, comme tout le slash dans la requête param est traitée comme une séparation d'Url.
Sens: même ce serait un échec pour les OBTENIR. http://myhost.com/api/book/search={"name"="Dark Trente"}
Et depuis ce n'est effectivement pas un POST, je ne souhaite pas l'utiliser. Comme je suis juste répertoriant les livres qui répondent à mes critères de recherche et de ne pas les modifier ou en ajouter quoi que ce soit.
Toute directive dans la lutte contre des problèmes similaires?
OriginalL'auteur Pavan M | 2013-11-15
Vous devez vous connecter pour publier un commentaire.
Ce lien est une bonne lecture. En fait, si votre
Dark/Thirty
est un identificateur (par exemple, identifie de manière unique une ressource), puis de le modifier (dans un schéma prévisible) de sorte qu'il n'a pas les caractères spéciaux; par exemple,DarkThirty
oudark-thirty
. Si il est, cependant, un terme de recherche, alors vous serait mieux servi pas pour le rendre Reposant, mais juste passer comme une normale de paramètre; c'est ce qu'ils sont pour.La différence entre
GET
etPOST
n'est pas ce que les personnages sont en elle, mais que l'objectif est.GET
est de plus en plus de choses: il doit être exempt d'effets secondaires. Une recherche, ou la récupération d'une page doit être unGET
.POST
effets des modifications à un serveur. Il est peu probable que vous auriez besoin de faire une opération qui requiert l'envoi de plus de données que l'URL permet, et dans le même temps apporte aucune modification sur le serveur, mais simplement rend une nouvelle page (sauf exceptions comme Shazam ou TinEye).Traiter avec des caractères spéciaux dans les paramètres GET est le travail de l'encodage de l'URL; si vous avez http://myhost.com/api/search?q=Dark%FThirty pour une recherche, votre site n'est pas moins bonne. Il existe deux principaux facteurs pour le RESTE, comme je les comprends: la convivialité et le référencement SEO de convivialité. La recherche n'a pas besoin de l'être. RESTE existe d'identifier les ressources, à ma connaissance; et les résultats de recherche à partir d'une requête ne sont pas une ressource.
Pour résumer, j'irais avec:
Si j'avais le contrôle sur les données du carnet d'entré je pourrais aller pour des noms plus conviviaux, comme vous l'avez dit à l'aide de Dark-Trente et supposons qu'il existe un livre existant de l'inventaire et de l'api permet à l'utilisateur de filtrer ou rechercher des enregistrements à l'aide thr URL fournir.
Votre serveur doit exécuter la chaîne de requête via une URL décodeur de toute façon, comme une question de cours. Donc, il devrait être un peu un non-problème. La plupart des frameworks web le faire pour vous gratuitement.
Vous pouvez aussi aller avec: myhost.com/api/book?name=Dark%FThirty comme l'URI identifiant le livre. RFC 3986 précise que le composant de requête d'un URI est pas nécessairement transmis à la ressource, mais peut être utilisé pour identifier la ressource.
Aussi, le lien que vous avez fourni est trompeuse (voir les commentaires à ce poste pendant une longue discussion). En bref: il n'y a pas une telle chose comme Reposant URI de la conception, des déclarations comme "[un terme de recherche] serait mieux servi à ne pas faire de Repos" n'ont pas vraiment de sens.
OriginalL'auteur Amadan
Le codage d'URL sonne comme la chose la plus facile à faire dans votre cas, en particulier puisque vous avez déjà une structure d'URL pour votre application qui ressemble à
http://myhost.com/api/book/name={internal-identifier}
oùinternal-identifier
résout à votre nom du livre (codé, bien sûr).Du RESTE point de vue, il n'est pas particulièrement question de savoir si l'URL représente une requête qui peut renvoyer une collection de ressources représentations ou identifie de manière unique une ressource spécifique. Vous pouvez utiliser cette structure pour les deux.
OriginalL'auteur Jonathan W