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?
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.
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.)
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.
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:
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.
À l'heure actuelle (2016), les derniers verbes HTTP sont GET, POST, PATCH , PUT et DELETE.
Vue d'ensemble
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
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
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,
De manière générale, c'est le motif que j'utilise:
Le projet Symfony essaie de garder ses méthodes HTTP liées aux méthodes CRUD et leur liste les associe comme suit:
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.