web-dev-qa-db-fra.com

Quelle est l'utilité des méthodes de requête HTTP PUT et DELETE?

J'ai lu beaucoup de choses à ce sujet mais je ne suis pas parvenu à tirer la conclusion à ce sujet.

Mais je n'ai jamais utilisé les méthodes de requête HTTP PUT ou DELETE. Ma tendance est d’utiliser GET lorsque la statistique du système (mon application ou mon site Web) peut ne pas être affectée (comme une liste de produits) et d’utiliser POST lorsqu’il est affecté (commande passée). Isn ' t-il suffisant ou est-ce que je manque quelque chose?

82
Rupesh Patel

DELETE est destiné à supprimer la ressource de la requête:

La méthode DELETE demande au serveur d'origine de supprimer la ressource identifiée par l'URI de demande. Cette méthode PEUT être remplacée par une intervention humaine (ou un autre moyen) sur le serveur Origin. Le client ne peut pas être assuré que l'opération a été effectuée, même si le code d'état renvoyé par le serveur Origin indique que l'action a été effectuée avec succès…

PUT sert à mettre ou à mettre à jour une ressource sur le serveur:

La méthode PUT demande à ce que l'entité incluse soit stockée sous l'URI de demande fourni. Si l'URI de demande fait référence à une ressource déjà existante, l'entité incluse DEVRAIT être considérée comme une version modifiée de celle résidant sur le serveur d'origine. Si Request-URI ne pointe pas vers une ressource existante et que cet URI peut être défini en tant que nouvelle ressource par l'agent utilisateur demandeur, le serveur d'origine peut créer la ressource avec cet URI…

Pour la spécification complète, visitez:

Les navigateurs actuels ne supportant malheureusement aucun verbe autre que POST et GET dans les formulaires HTML , vous ne pouvez généralement pas utiliser HTTP dans leur pleine mesure avec eux (vous pouvez quand même détourner leur soumission via JavaScript). L'absence de prise en charge de ces méthodes dans les formulaires HTML a conduit à des URI contenant des verbes, comme par exemple

POST http://example.com/order/1/delete

ou même pire

POST http://example.com/deleteOrder/id/1

tunnelage efficace de la sémantique CRUD sur HTTP. Mais les verbes n'ont jamais été censés faire partie de l'URI. Au lieu de cela, HTTP fournit déjà le mécanisme et la sémantique à CRUD une ressource (par exemple, un ordre) via les méthodes HTTP. HTTP est un protocole et pas seulement un service de tunnellisation de données.

Donc, pour supprimer une ressource sur le serveur Web, vous appelez

DELETE http://example.com/order/1

et pour le mettre à jour, vous appelez

PUT http://example.com/order/1

et fournissez la représentation de ressource mise à jour dans le corps de PUT pour que le serveur Web l'applique ensuite.

Ainsi, si vous créez une sorte de client pour une API REST , vous lui demanderez probablement d'envoyer des requêtes PUT et DELETE. Cela peut être un client construit dans un navigateur, par exemple. envoi de requêtes via JavaScript ou bien un outil tournant sur un serveur, etc.

Pour plus de détails, visitez:

82
Gordon

L'utilisation de verbes de requête HTTP tels que GET, POST, DELETE, PUT, etc. vous permet de créer des applications Web RESTful. Lisez à ce sujet ici: http://en.wikipedia.org/wiki/Representational_state_transfer

La meilleure façon de voir les avantages de cela est de regarder cet exemple. Chaque framework MVC a un Router/Dispatcher Qui mappe les URL-s à actionControllers. Donc, une URL comme celle-ci: /blog/article/1 Invoquerait blogController::articleAction($id); Maintenant, ce routeur connaît uniquement l'URL ou /blog/article/1/

Mais si ce routeur connaissait un objet de requête HTTP complet au lieu d'une simple URL, il pourrait avoir accès au verbe de requête HTTP (GET, POST, PUT, DELETE ...) et à bien d'autres informations utiles sur la requête HTTP actuelle.

Cela vous permettrait de configurer l'application de sorte qu'elle puisse accepter la même URL et la mapper à différents actionControllers en fonction du verbe de requête HTTP.

Par exemple:

si vous voulez revenir sur l'article 1, vous pouvez faire ceci:

GET /blog/article/1 HTTP/1.1

mais si vous voulez supprimer l'article 1, vous ferez ceci:

DELETE /blog/article/1 HTTP/1.1

Notez que les deux requêtes HTTP ont le même URI,/blog/article/1, la seule différence est le verbe de requête HTTP. Et basé sur ce verbe, votre routeur peut appeler différents actionController. Cela vous permet de construire des URL-s ordonnées.

Lisez ces deux articles, ils pourraient vous aider:

Symfony 2 - Notions fondamentales sur HTTP

Symfony 2 - Routing

Ces articles concernent le framework Symfony 2, mais ils peuvent vous aider à comprendre le fonctionnement des requêtes et réponses HTTP.

J'espère que cela t'aides!

23
Limeni

Méthodes sûres: Obtenir une ressource/Aucune modification dans la ressource
Idempotent: Aucun changement d'état de la ressource si demandé plusieurs fois
Méthodes dangereuses: Créer ou mettre à jour une ressource/modification dans une ressource
Non-idempotent: Modification de l'état des ressources si demandé plusieurs fois

selon vos besoins:

1) Pour un fonctionnement sûr et idempotent (Fetch Resource), utilisez --------- GET METHOD
2) Pour les opérations dangereuses et non idempotentes (Insérer une ressource), utilisez --------- MÉTHODE POST
3) Pour les opérations dangereuses et idempotentes (Update Resource), utilisez --------- PUT METHOD
3) Pour les opérations dangereuses et idempotentes (Supprimer la ressource), utilisez --------- DELETE METHOD

1
user1953168