Est-ce que l'utilisation délicieux requêtes GET pour la création au lieu de POST, et pourquoi je ne devrais pas faire la même chose?

StackOverflow https://stackoverflow.com/questions/8802795

  •  25-10-2019
  •  | 
  •  

Question

Je regarde délicieux API et voir ce qui suit est l'opération pour créer un nouveau signet:

https://api.del.icio.us/v1/posts/add?&url={URL}&description={description}

On dirait qu'ils utilisent une requête GET pour créer des entrées de la base de données côté serveur, que je l'ai lu ailleurs ne devrait pas être fait avec les requêtes GET, POST uniquement avec des demandes.

J'écris mon propre API en ce moment et je pense que c'est fabuleux pour permettre aux utilisateurs d'interagir avec l'API directement à partir de l'URL. Mais vous ne pouvez pas le faire, sauf si vous autorisez les opérations CRUD sur GET.

Alors, est délicieux fait vraiment opérations CRUD sur GET? Y at-il une raison importante, je ne devrais pas faire la même chose dans mon API, ou est juste après le mandat de CRUD pour empêcher l'invocation accidentelle?

Était-ce utile?

La solution

accidentelle invocation fait partie de celui-ci; c'est ce que les moyens spec HTTP quand il parle de méthodes « idempotents ». Mais on pourrait dire que ce délicieux fait est en fait idempotent aussi longtemps que l'URL n'est ajoutée une fois, peu importe combien de fois que vous obtenez. Mais plus important encore est que GET est sécurité :

The important distinction here is that the user
did not request the side-effects, so therefore
cannot be held accountable for them.

Du point de vue de la conception d'interface, vous voulez user-agents pour faire POST et PUT et DELETE plus difficile que GET, ou du moins nettement différents, de sorte que les utilisateurs peuvent compter sur cette différence pour laisser entendre quand leurs actions pourraient provoquer un changement dans l'état des ressources, parce qu'ils sont responsables de ces changements. En utilisant GET pour effectuer des modifications, même si idempotent, brouille cette ligne de responsabilité, surtout quand prefetchers sont largement déployées.

Autres conseils

Cela dépend si vous suivez les principes REST GET pour changer les choses est interdit. Par conséquent, la plupart des gens disent avec REST POST utilisation pour les changements.

Cependant, il y a une différence entre GET et POST. Selon les requêtes GET RFC ont toujours une réponse de suivi. Et si vous utilisez POST vous devez suivre le modèle Redirect-après-Post.

Une autre limitation est que les URL peuvent avoir une taille limitée. Donc, GET ne fonctionnera aussi longtemps que vos données d'entrée est assez courte. Donc, l'API délicieux y ait un bug. Vous ne serez pas en mesure d'ajouter toutes les URL possibles via un paramètre GET.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top