OK, voici le fait. Stackoverflow est mis en œuvre du style de repos. Lorsque vous visitez une question spécifique / $ ID / URL, vous pouvez voir la question. Le contenu est retourné en HTML car c'est ce que le navigateur comprend. P>
Je dois développer mon propre service de repos. Le fait est que je dois retourner plusieurs formats pour les mêmes informations. Par exemple, la valeur par défaut pourrait être HTML, mais je pourrais également revenir un XML ou un JSON. P>
question est: quel est le style recommandé pour y parvenir? Trois choix (plus de vos suggestions utiles) p>
Même chose est pour les opérations de mise (post). Si je veux soumettre des données dans différents formats, j'ai besoin d'informer le récepteur au format que je fournit, de sorte que la même situation (et la même question) est titulaire. P>
merci! p>
Edit em>: une proposition supplémentaire est la suivante p>
4) Spécifiez une URL appropriée pour chaque format E.G. http://example.com/questions/12345.json . Cela semble beau, mais cela ne signifie-t-il pas que, pour la cohérence, nous devrions également avoir http: // exemple. com / questions / 12345.html ? sonne tellement 1995 ...:) p>
PS: Je déteste Markdown mettant un ordre arbitraire à la liste. Si je veux commencer par 4, je devrais pouvoir le faire. p>
3 Réponses :
J'irais pour Option 1 Strong> (paramètre URL) car il est le plus cohérent avec les principes du repos et le plus pragmatique. P>
Option 2 Sentences mal - Vous parlez de représentations différentes de la même ressource, vous devez donc utiliser la même uri pour eux. P>
Option 3 Smacks d'être trop difficile à contrôler - comment le testez-vous à la main de votre navigateur, par exemple? p>
(les mêmes arguments s'appliquent au Mettez code> / POST CODE>.) P>
Merci. Pensez-vous qu'il serait préférable de spécifier une chaîne simple (format = JSON) ou le type MIME (format = application / JSON)?
Je ne suis pas d'accord avec l'affirmation que l'option numéro 1 est la plus reposante. Pouvez-vous élaborer votre raisonnement? :)
@Emil: Avoir de multiples URI pour la même ressource se sent mal pour moi. (OK, sans doute le ? Format = JSON code> fait partie de l'URI, mais vous savez ce que je veux dire.)
C'est en fait un grand argument et je dois admettre que mon offre était erronée. Je pense toujours qu'un en-tête serait une meilleure option qu'un paramètre get, cependant. Il est vrai qu'il serait plus difficile de passer à la main à partir d'un navigateur, mais à ces fins, il est probablement bon de regarder une seule représentation. Il est tout à fait possible de s'assurer que la sérialisation réelle sur différents formats fonctionne correctement en utilisant des tests d'unité réguliers.
Il serait possible de compromettre ici, cependant. Ajoutez une assistance pour l'en-tête Accepter et un paramètre Get. Les applications clients peuvent spécifier une représentation à l'aide de l'en-tête et vous pouvez utiliser le QueryString lors du débogage d'un navigateur.
L'option 3 est très facile à tester avec un navigateur. Obtenez l'affiche du plug-in Firefox. Tout développeur Web devrait avoir ce (et d'autres) plugins de navigateur. Il vous permet de définir tous les en-têtes HTTP que vous souhaitez et apportez n'importe quel type de demande (placez-le, post Supprimer ...) à une URL.
Peu importe le moindre entre 1. et 2. une URI est opaque, donc de la partie d'interface de repos, il n'y a pas de différence. P>
du point de vue de la mise en cache, 1. empêchera de nombreux caches de faire leur travail. P>
Habituellement, les gens utilisent Conneg avec une en-tête acceptée, éventuellement avec une redirection à l'URI totalement qualifiée en utilisant /customer/21.json p>
Option n ° 3, réglage de l'en-tête HTTP "Accepter", est plus conforme à la spécification HTTP et, entre les puristes du reste, est considéré comme le plus correct. Cela signifie également que vous conservez la même URL (ressource) quelle que soit la représentation. P>
Vous pouvez toutefois rencontrer des agents utilisateur qui ne sont pas capables de définir un en-tête d'acceptation, ce qui permet de prendre en charge un mécanisme de sauvegarde pour spécifier le format de réponse est souhaitable. Dans ce cas, je suggère un paramètre de chaîne de requête d'URL. L'utilisation d'un paramètre de chaîne de requête URL signifie que vous gardez la même URL de base, peu importe le type de contenu renvoyé. Cela rend plus clairement que les clients ne devraient émettre que mettre à cette URL et non aux URL de /foo/bar.json ou /foo/bar.xml. P>
Edit: Une autre chose à considérer si vous décidez d'aller avec le suffixe URL (c'est-à-dire FOO.JON VS. FOO? FORMAT = JSON) est que vous pouvez rencontrer des problèmes avec des proxies de mise en cache. Si quelqu'un émet une mise en place à /foo.json, un proxy n'interprétera pas comme une demande d'invalidation /foo.xml. Si, cependant, vous utilisez / foo? Format = JSON, alors tout est stocké sous la même ressource (/ FOO) dans le proxy. P>
Afaik La plupart des caches ignoreront simplement toute URI qui comprend une chaîne de requête, plutôt que de séparer l'URI dans sa base et de la stocker.
Question similaire: Stackoverflow.com/Questtions/381568/...
Oui, presque un duplicata, mais comme il se trouve, il est moins direct que le mien. Espérons que cette question sera plus bénéfique pour les choogleurs.
Les schémas de nommage d'Uri et les URI imbriquées n'ont absolument rien à voir avec le repos. Si vous pouvez compter sur la modification de pièces de l'URI pour accéder aux ressources de manière prévisible, il est possible que ce soit simplement RPC, pas de repos.
Ok, pouvez-vous détailler un peu s'il vous plaît?
Quelle est cette obsession que tout le monde a soudainement avec la fourniture des formats génériques XML et JSON? Le seul client qui sera en mesure d'interpréter c'est votre propre JavaScript dans le navigateur Web, alors pourquoi prendre en charge deux formats génériques? Les deux types sont des analyseurs sont largement disponibles, alors pourquoi un entretien des consommateurs que vous utilisez?
Parce que le XML générique que je dois fournir est une standard de facto, mais pour la communication ASYNC que je préfère JSON.
Avez-vous envisagé de revenir application / vnd.yourcompany.Question + xml et application / vnd.yourcompany.Question + json?
@Wahnfrieden - Vous continuez sur le dumping sur chaque réponse de repos posté ici pourtant ne répondez jamais à aucune question. Que diriez-vous d'être utile. . . Ou n'est-ce pas un concept de repos?
@Stefano, une API de repos décrit vos types de supports et inclut uniquement votre URI de point d'entrée unique. Les ressources sont découvertes par hypertexte, et non par la manipulation de l'URI. La représentation de l'URI est sans conséquence de repos, bien qu'elle puisse toujours être "gentille" d'avoir de jolies URIS. @Gandalf, pas besoin de troll, je réponds aussi aux questions, mais un commentaire est approprié pour indiquer une erreur, non?