web-dev-qa-db-fra.com

Quelles méthodes HTTP correspondent à quelles méthodes CRUD?

Dans la programmation de style RESTful, nous devrions utiliser les méthodes HTTP comme blocs de construction. Je ne sais pas trop quelles méthodes correspondent aux méthodes classiques de CRUD. GET/Read et DELETE/Delete sont assez évidents.

Cependant, quelle est la différence entre PUT/POST? Correspondent-ils un à un avec créer et mettre à jour?

201
Drew
Create = PUT with a new URI
         POST to a base URI returning a newly created URI
Read   = GET
Update = PUT with an existing URI
Delete = DELETE

PUT peut mapper sur Create et Update en fonction de l'existence de l'URI utilisé avec PUT.

POST mappe à créer.

Correction: POST peut également mapper sur Update, bien qu'il soit généralement utilisé pour Create. POST peut également être une mise à jour partielle, nous n'avons donc pas besoin de la méthode PATCH proposée.

284
Paul Morgan

Toute la clé est de savoir si vous faites un changement idempotent ou non. C'est-à-dire que si vous agissez deux fois sur le message, vous obtiendrez "la même chose" que si vous ne l'aviez fait qu'une seule fois. Vous avez un changement idempotent et il devrait être mappé sur PUT. Sinon, cela correspond à POST. Si vous ne permettez jamais au client de synthétiser des URL, PUT est assez proche de Update et POST peut gérer Create, mais ce n'est certainement pas la seule façon de le faire. si le client sait qu'il veut créer /foo/abc et sait quel contenu y mettre, cela fonctionne très bien comme PUT.

La description canonique d'un POST est quand vous vous engagez à acheter quelque chose: c'est une action que personne ne veut répéter sans le savoir. En revanche, vous pouvez régler l’adresse d’expédition de la commande à l’avance avec PUT: cela n’a pas d’importance de savoir si vous devez envoyer à 6 Anywhere Dr, Nowhereville une fois, deux fois ou cent fois: c’est toujours la même adresse. Est-ce que cela signifie que c'est une mise à jour? Peut-être… Tout dépend de la façon dont vous voulez écrire le back-end. (Notez que les résultats peuvent ne pas être identiques: vous pouvez signaler à l'utilisateur la dernière exécution d'un PUT dans le cadre de la représentation de la ressource, ce qui garantirait que des PUT répétés ne provoquent pas un résultat identique, mais que le résultat être "le même" dans un sens fonctionnel.)

47
Donal Fellows

Je cherchais la même réponse, voici ce que dit IBM. IBM Link

POST            Creates a new resource.
GET             Retrieves a resource.
PUT             Updates an existing resource.
DELETE          Deletes a resource.
30
ex0b1t

Il y a une excellente conversation vidéo sur YouTube par stormpath avec une explication, l'URL devrait passer à la partie correcte de la vidéo:

stormpath youtube video

En outre, cela vaut la peine de regarder, cela fait plus d’une heure de conversation mais très intéressant si vous songez à investir du temps dans la construction d’une REST api.

9
pleshy

À l'heure actuelle (2016), les derniers verbes HTTP sont GET, POST, PATCH , PUT et DELETE.

Vue d'ensemble

  • HTTP GET - SELECT/Demande
  • HTTP PUT - UPDATE
  • HTTP POST - INSERT/Create
  • HTTP PATCH - Lorsque METTEZ, une représentation complète de la ressource est fastidieuse et utilise davantage de bande passante, par exemple: avoir à mettre à jour partiellement une colonne
  • HTTP DELETE - DELETE

J'espère que cela t'aides!

Si vous êtes intéressé par la conception des API REST, il s'agit d'une lecture intéressante à faire! version en ligne du site Web github référentiel

8
d1jhoni1b

Cela dépend de la situation concrète .. mais en général:

PUT = met à jour ou modifie une ressource concrète avec un URI concret de la ressource.

POST = créer une nouvelle ressource sous la source de l'URI donné.

C'est à dire.

Modifier un article de blog:

PUT:/blog/entry/1

Créer un nouveau:

POST:/blog/entry

PUT peut créer une nouvelle ressource dans certaines circonstances où l'URI de la nouvelle ressource est clairement défini avant la demande. POST peut également être utilisé pour implémenter plusieurs autres cas d'utilisation, qui ne sont pas couverts par les autres (GET, PUT, DELETE, HEAD, OPTIONS)

La compréhension générale des systèmes CRUD est GET = requête, POST = créer, Put = mettre à jour, DELETE = supprimer

7
Stuck

Les blocs de construction de REST sont principalement les ressources (et l'URI) et l'hypermédia. Dans ce contexte, GET est le moyen d'obtenir une représentation de la ressource (qui peut en fait être mappée sur un SELECT en termes CRUD).

Cependant, vous ne devez pas nécessairement vous attendre à un mappage univoque entre les opérations CRUD et les verbes HTTP. La principale différence entre PUT et POST concerne leur propriété idempotente. POST est également plus couramment utilisé pour les mises à jour partielles, car PUT implique généralement l'envoi d'une nouvelle représentation complète de la ressource.

Je suggère de lire ceci:

Le spécification HTTP est également une référence utile:

La méthode PUT demande à ce que l'entité incluse soit stockée sous l'URL de demande fourni.

[...]

La différence fondamentale entre les demandes POST et PUT est reflétée dans la signification différente de l'URI de demande. L'URI dans une demande POST identifie la ressource qui gérera l'entité incluse. Cette ressource peut être un processus acceptant les données, une passerelle vers un autre protocole ou une entité distincte acceptant les annotations. En revanche, l'URI dans une demande PUT identifie l'entité jointe à la demande - l'agent d'utilisateur sait ce que l'URI est destiné et le serveur NE DOIT PAS tenter d'appliquer la demande à une autre ressource. Si le serveur souhaite que la requête soit appliquée à un autre URI,

4
Bruno

De manière générale, c'est le motif que j'utilise:

  • HTTP GET - SELECT/Demande
  • HTTP PUT - UPDATE
  • HTTP POST - INSERT/Create
  • HTTP DELETE - DELETE
3
AJ.

Le projet Symfony essaie de garder ses méthodes HTTP liées aux méthodes CRUD et leur liste les associe comme suit:

  • GET Récupérer la ressource du serveur
  • POST Créer une ressource sur le serveur
  • PUT Mettre à jour la ressource sur le serveur
  • DELETE Supprimer la ressource du serveur

Comme il est dit sur cette page, il est intéressant de noter que "dans les faits, de nombreux navigateurs modernes ne prennent pas en charge les méthodes PUT et DELETE."

D'après mes souvenirs, Symfony "simule" PUT et DELETE pour les navigateurs qui ne les prennent pas en charge lors de la génération de ses formulaires, afin d'essayer d'être aussi près de la méthode HTTP, même si un navigateur ne prend pas en charge il.

1
Matt Gibson