2009-07-19 20 views
0

Je suis actuellement en train d'examiner du code pour des collègues sur un projet différent et ils utilisent un service Web WCF ReST. Mon problème est que pour chacune de leurs méthodes, seul le protocole HTTP POST a été spécifié. Cela est vrai que la méthode actuelle soit responsable de l'obtention, de la mise à jour ou de la création d'enregistrements.Services Web - Put vs Post vs Get

Les services Web doivent-ils toujours respecter les bonnes normes de protocole HTTP pour le traitement des informations? Ne devrait pas une méthode comme celle ci-dessous avoir une méthode HTTP de "GET" plutôt que le "POST" spécifié?

[ServiceContract] 
public interface IBranchService 
{ 
    [OperationContract] 
    [WebInvoke(
     Method="POST", 
     BodyStyle = WebMessageBodyStyle.WrappedRequest, 
     ResponseFormat = WebMessageFormat.Json 
     ) 
    ] 
    GridResponse GetBranchesAll(string brandCode, string branchNumber); 
... 

Il n'y a pas d'autres contraintes autour de l'architecture qui imposent que seul le POST soit utilisé.

Répondre

3

Il n'y a aucun moyen de répondre à cela sans connaître les contraintes sous lesquelles ils ont conçu l'API. Par exemple, notre API a la capacité de fonctionner entièrement avec les requêtes POST car elle doit être appelée par Flash qui a des bugs avec GET (c'est-à-dire ne peut pas envoyer d'en-têtes de requête) et ne peut pas envoyer PUT ou DELETE. Certaines bibliothèques Javascript ont des limitations similaires.

Oui, dans un monde idéal, il adhérerait à la sémantique HTTP. Mais nous ne vivons pas dans un monde idéal. Vous devez savoir si leur décision d'utiliser POST est le résultat de l'ignorance de la sémantique du protocole HTTP, ou d'un pragmatisme basé sur les limitations de l'appelant.