De REPOS et de multiples formats de données
Ok, voici le fait. StackOverflow est mis en œuvre de REPOS de style. Lorsque vous visitez une des questions spécifiques/$id/URL vous obtenez de voir la question. Le contenu est rendu en HTML car c'est ce que le navigateur comprend.
Je dois développer mon propre service REST. Le fait est que je dois retourner plusieurs formats de la même information. Par exemple, la valeur par défaut peut être du HTML, mais je pourrais revenir également un XML ou JSON.
Question est: qu'est-ce que le style recommandé pour y parvenir ? Trois choix (plus de vos suggestions utiles)
- option dans l'URL (par exemple http://example.com/questions/12345/?format=json )
- interface différente (par exemple: pour les données json vous avez http://example.com/questions/1234/json/ ou http://example.com/json/questions/12345/, pour les données xml que vous avez http://example.com/questions/1234/xml/ etc... vous obtenez le point)
- en-tête http Accept: application/json
En est de même pour METTRE de la (POST) des opérations. Si je veux envoyer des données dans différents formats, j'ai besoin d'informer le récepteur le format que je suis en fournissant, de sorte que la même situation (question) détient.
Merci!
Modifier: proposition Supplémentaire est la suivante
4) Spécifier une URL propre pour chaque format par exemple http://example.com/questions/12345.json . Cela a l'air sympa, mais ne serait-il pas dire que, pour des raisons de cohérence, nous devrions aussi avoir http://example.com/questions/12345.html ? les sons afin de 1995... 🙂
PS: je déteste les démarques de mettre un ordre arbitraire de la liste. Si je veux commencer avec 4, je devrais être capable de le faire.
Oui, presque un doublon, mais comme il est, il est moins directe que la mienne. Nous espérons que cette question sera des plus bénéfiques pour les googlers.
D'affectation de noms URI et des schémas imbriqués Uri ont absolument rien à voir avec le RESTE. Si vous pouvez vous baser sur la modification de certaines parties de l'URI pour accéder à des ressources de manière prévisible, les chances sont que c'est simplement la RPC, pas de REPOS.
Ok, pouvez-vous détailler un peu s'il vous plaît ?
vous garder sur le dumping sur tous les REPOS répondre à posté ici encore, ne pas toujours répondre à toutes les questions vous-même. Que diriez-être utile. . . ou n'est-ce pas un RESTE de concept?
OriginalL'auteur Stefano Borini | 2009-08-08
Vous devez vous connecter pour publier un commentaire.
Je voudrais aller Option 1 (paramètre de l'URL) que c'est la plus cohérente avec les principes de REPOS, et le plus pragmatique.
Option 2 sent mauvais - vous parlez des représentations différentes d'une même ressource, alors vous devriez utiliser le même URI pour eux.
Option 3 sent d'être trop difficile à contrôler - comment jugez-vous la main de test à partir de votre navigateur, par exemple?
(Les mêmes arguments s'appliquent pour
PUT
/POST
.)Je suis en désaccord avec l'affirmation que l'option numéro 1 est le plus Réparateur. Pouvez-vous expliquer votre raisonnement? 🙂
Je voudrais faire simple:
format=json
Il serait possible de compromettre ici, cependant. Ajout du support pour l'accepter-d'en-tête et un paramètre. Les applications clientes peuvent spécifier la représentation à l'aide de l'en-tête, et vous pouvez utiliser la chaîne de requête lors du débogage à partir d'un navigateur.
L'Option 3 est très facile de tester avec un navigateur. Obtenir le plugin Firefox Affiche. Tout développeur web devrait avoir ça (et d'autres) des plugins du navigateur. Il vous permet de définir tous les en-Têtes HTTP que vous voulez et faire tout type de demande (PUT, POST, DELETE...) à une URL.
OriginalL'auteur
Option #3, le réglage de l'adresse HTTP "Accept" en-tête, est plus conforme à la spécification HTTP, RESTE parmi les puristes, est considérée comme la plus correcte. Cela signifie également que vous gardez la même URL (ressource) quelle que soit la représentation est.
Toutefois, vous pouvez rencontrer les agents utilisateurs qui ne sont pas capables de définir un en-tête Accept, afin de soutenir un mécanisme de sauvegarde pour spécifier le format de réponse est conseillé. Dans ce cas, je suggère une URL en paramètre de chaîne de requête. À l'aide d'une URL paramètre de chaîne de requête vous permet de conserver la même URL, peu importe le type de contenu retourné. Cela rend plus clair le fait que les clients ne devraient question d'une mise à l'URL et de ne pas le /foo/bar.json ou /foo/bar.xml Url.
Edit: une Autre chose à considérer si vous décidez d'aller avec le suffixe d'URL (c'est à dire foo.json vs foo?format=json), c'est que vous risquez de rencontrer des problèmes avec la mise en cache proxy. Si quelqu'un émet une mise à /foo.json, un proxy de ne pas interpréter cela comme une demande d'invalider /foo.xml. Si, toutefois, vous utilisez /foo?format=json, alors c'est stockée sous la même ressource (/foo) dans le proxy.
OriginalL'auteur
Il n'a pas d'importance dans le moindre entre 1. et 2. Un URI est opaque, donc du RESTE de l'interface de la partie, et il n'y a pas de différence.
À partir d'un point de vue de la mise en cache, 1. permettra d'éviter de nombreuses cachettes de faire leur travail.
Cependant, d'ordinaire, les gens utilisent conneg avec en-tête Accept, éventuellement avec une redirection vers le complet URI à l'aide de /le client/21.json
OriginalL'auteur