Question

En regardant autour, je ne peux pas nommer une seule application Web (pas de service Web) qui utilise autre chose que GET et requêtes POST. Y at-il une raison particulière à cela? Est-ce que certains navigateurs (ou serveurs) ne supportent pas d'autres types de demandes? Ou est-ce que pour des raisons historiques? Je voudrais utiliser PUT et DELETE demandes pour rendre ma vie un peu plus facile sur le côté serveur, mais je suis réticent à parce que personne ne le fait.

Était-ce utile?

La solution

En fait, une bonne quantité de gens utilisent PUT et DELETE, la plupart du temps pour les API non-navigateur. Quelques exemples sont le protocole de publication Atom et les API Google Data:

Au-delà, vous ne voyez pas PUT / DELETE dans l'usage courant, car la plupart des navigateurs ne prennent pas en charge PUT et DELETE par formulaires. HTML5 semble fixer ceci:

La façon dont cela fonctionne pour les applications de navigateur est: les gens conçoivent des applications RESTful avec PUT et DELETE à l'esprit, alors ces demandes « tunnel » à travers annone du navigateur. Par exemple, voir cette question SO sur la façon dont Ruby on Rails accomplit cela en utilisant les champs cachés:

Alors, vous ne seriez pas sur votre propre conception de votre application avec le plus grand ensemble de verbes HTTP à l'esprit.

EDIT: Par ailleurs, si vous êtes curieux de savoir pourquoi PUT / SUPPRIMER manquent de messages de forme à base de navigateur, il se trouve qu'il n'y a pas vraiment une bonne raison technique. La lecture autour de ce fil sur le reste-discuss liste de diffusion, en particulier les commentaires de Roy Fielding, est intéressant pour un certain contexte:

EDIT: Il y a des commentaires sur si les bibliothèques AJAX prennent en charge toutes les méthodes. Il ne descende à la mise en œuvre du navigateur réel de XMLHttpRequest. Je pensais que quelqu'un pourrait trouver ce lien pratique, qui teste votre navigateur pour voir comment l'objet compatible HttpRequest est avec différentes options HTTP.

Malheureusement, je ne sais pas d'une référence qui recueille ces résultats.

Autres conseils

Tout simplement, HTML 4.01 élément form ne permet aux valeurs « POST » et « GET » dans son attribut method

Certains serveurs proxy avec les politiques de sécurité difficiles pourraient les laisser tomber. J'utilise PUT et DELETE de toute façon.

J'ai lu que certains navigateurs ne supportent pas d'autres méthodes HTTP correctement, bien que je ne peux pas citer de détails.

Rails, en particulier, emballeront vos formulaires avec un paramètre de méthode pour définir explicitement ce même si le navigateur ne supporte pas ces méthodes. Cela semble une précaution raisonnable si vous allez le faire.

Je dis utiliser toutes les fonctionnalités de HTTP, les navigateurs damnés, lol. Peut-être que ça va inspirer une utilisation plus complète et correcte du protocole HTTP aller de l'avant. Il y a plus cela se produise sur le net que seulement POSTs et s'y prend. A propos du temps des implémentations de navigateur reflètent cela.

Cela dépend de votre navigateur et de la bibliothèque Ajax. Par exemple jQuery prend en charge toutes les méthodes HTTP même si le navigateur ne peut pas. Voir par exemple le jQuery documentation "ajax" sur l'attribut "type".

Le Restlet framework Java vous permet de tunnel PUT et DELETE demandes par le biais des opérations HTML POST. Pour ce faire, vous ajoutez juste méthode = PUT ou méthode = supprimer votre chaîne de requête de l'URI, par exemple:

http://www.example.com/user=xyz?method=delete ...

est le même que Ruby on Rails de l'approche (comme décrit par @ars ci-dessus).

Personnellement, je ne vois vraiment pas de but pour l'utilisation PUT ou DELETE dans une application Web. Toutes les opérations une application effectue sont en lecture ou en écriture, aka sortie d'entrée. Pourquoi avez-vous besoin de distinguer la nature de l'opération dans l'en-tête de la requête HTTP? Je pourrais faire des appels ajax avec le même URL de la forme / objet / object_id et faire de multiples opérations telles que supprimer, mettre à jour, obtenir la valeur ou créer. Juste en regardant l'URL, je n'ai aucune idée que l'on est. En utilisant GET et POST seulement, mes urls seront:

/ objet / id / supprimer

/ objet / id / créer

/ objet / id / update

/ objet / id -> GET implicite

etc.

Sur la base de mon expérience limitée, cela est beaucoup plus propre que les types de demande d'en-tête cachés dans de nombreux cas. Je ne dis pas qu'il ne faut jamais utiliser PUT ou SUPPRIMER, juste que les utiliser que si absolument nécessaire.

Reportez-vous à « RESTful API Web » par Leonard Richardson pour en savoir plus sur les différents cas d'utilisation et conventions concernant les méthodes de requête HTTP dans un api web RESTful.

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