web-dev-qa-db-fra.com

Avantages de WebInvoke POST par rapport à WEBGET

salut j'ai trouvé l'un des exemples de wcf REST avec une méthode WEBINVOKE comme le suivant

[OperationContract]
[WebInvoke(
BodyStyle=WebMessageBodyStyle.Bare,
Method="POST",
RequestFormat=WebMessageFormat.Xml,
ResponseFormat=WebMessageFormat.Xml,
UriTemplate="CreateStudent/{StudentName}/{Chair}/{AverageNote}")]
int Insert(string StudentName, string Chair, string AverageNote);


[OperationContract]
[WebGet(
BodyStyle= WebMessageBodyStyle.Bare,
RequestFormat = WebMessageFormat.Xml,
ResponseFormat = WebMessageFormat.Xml)]
Student[] GetAllStudents();

ma question est: puis-je utiliser la méthode WEBGET au lieu de WEBINVOKE comme ci-dessous et quelle est exactement la différence entre WEBINVOKE POST et WEBGET, selon mon observation, nous envoyons les paramètres en ajoutant des chaînes de requête dans le Modèles d'URI pour WEbGet et WebInvoke POST, quels sont les avantages que nous pouvons obtenir en utilisant WebInvoke POST que nous ne pouvons pas obtenir en utilisant WEBGET

[OperationContract]
[WebGet(
BodyStyle=WebMessageBodyStyle.Bare, 
RequestFormat=WebMessageFormat.Xml,
ResponseFormat=WebMessageFormat.Xml,
UriTemplate="CreateStudent/{StudentName}/{Chair}/{AverageNote}")]
int Insert(string StudentName, string Chair, string AverageNote);
28
venkat

C'est une très grande différence. Tout d'abord REST est généralement utilisé avec ces verbes HTTP:

  • GET - récupérer des éléments
  • POST - insertion d'éléments
  • PUT - mise à jour des éléments
  • DELETE - suppression d'éléments

Vous ne devez jamais utiliser GET pour autre chose que pour récupérer des éléments. L'utilisation de HTTP GET pour la modification des données est considérée comme une mauvaise pratique dans le développement Web entier. Pour déclencher GET, il vous suffit de créer un lien sur la page Web ou de simplement saisir une URL vers le navigateur. Vous frapperez le rafraîchissement 50 fois et vous avez 50 mêmes insertions. La modification des données doit toujours être effectuée avec POST. Si vous avez un formulaire qui déclenche HTTP POST (la publication ne peut pas être déclenchée directement) et que vous appuyez sur Actualiser le navigateur vous demandera généralement si vous souhaitez que le formulaire soit soumis à nouveau = si vous voulez vraiment publier et traiter à nouveau les données sur le serveur.

Un autre problème est que la requête GET peut être mise en cache et redirigée mais pas POST ne le peuvent pas.

48
Ladislav Mrnka

Ce lien devrait permettre de mieux comprendre les réponses fournies:

http://blog.markkoltnuk.com/2011/02/14/understanding-wcf-webinvokewebget-attributes/

Expliquons, une fois pour toutes, quelle est la différence entre WebInvoke et WebGet.

WebGet (couramment utilisé pour récupérer des données)

L'attribut WebGet expose les opérations à l'aide du verbe GET. Vous pouvez accéder au point de terminaison directement via un navigateur Web en tapant l'URI du service dans la barre d'adresse. Les paramètres peuvent être envoyés dans l'URI sous forme de paramètres de chaîne de requête ou intégrés dans l'URI. L'attribut WebGet doit être utilisé uniquement pour la récupération de données en raison de ses capacités de mise en cache.

WebInvoke (couramment utilisé pour la saisie/mise à jour des données) L'attribut WebInvoke expose les services à l'aide d'autres verbes HTTP tels que POST, PUT et DELETE. POST est la valeur par défaut mais elle peut être modifiée en définissant la propriété Method de l'attribut. L'attribut WebInvoke doit être utilisé uniquement pour la saisie/mise à jour des données.

5
ramizmoh

Pour répondre à votre question, je vous recommande de comprendre la sémantique du protocole HTTP, en particulier les verbes HTTP, tels que GET, POST, PUT, DELETE
HTTP GET est effectué pour récupérer des ressources à partir de n'importe quel emplacement et, par conséquent, la demande ne doit pas modifier l'état de la ressource.
HTTP POST est utilisé pour créer et parfois mettre à jour du contenu et a donc été utilisé dans la méthode Insert ci-dessus.
Si vous exécutez le service WCF ci-dessus et voyez comment ces requêtes sont formées et le serveur, vous verriez que GET n'a pas de charge utile corporelle alors que POST l'a. Dans le cas de POST le corps contient le contenu qui doit être créé\update.

2
Chandermani