tutorial - wcf vs rest




Ventajas de WebInvoke POST en comparación con WEBGET (2)

hola encontré uno de los ejemplos de wcf REST con un método WEBINVOKE al igual que el siguiente

[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();

mi pregunta es ¿puedo usar el método WEBGET en lugar de WEBINVOKE como a continuación y cuál es exactamente la diferencia entre WEBINVOKE POST y WEBGET, según mi observación, estamos enviando los parámetros al anexar cadenas de consulta en las plantillas de URI para WEbGet y WebInvoke POST, ¿Cuáles son las ventajas que podemos obtener usando WebInvoke POST que no podemos obtener con 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);

Es una gran diferencia. En primer lugar, REST generalmente se usa con estos verbos HTTP:

  • GET - recuperar elementos
  • POST - insertar elementos
  • PUT - actualizar elementos
  • ELIMINAR - eliminar elementos

Nunca debe usar GET para nada más que recuperar elementos. El uso de HTTP GET para la modificación de datos se considera una mala práctica en todo el desarrollo web. Para activar GET, solo necesita crear un enlace en la página web o simplemente escribir una URL en el navegador. Tocará actualizar 50 veces y tendrá 50 insertos iguales. La modificación de datos siempre debe hacerse con POST. Si tiene un formulario que desencadena HTTP POST (la publicación no se puede desencadenar directamente) y acierta, el navegador de actualización generalmente le preguntará si desea que el formulario se envíe nuevamente = si realmente desea publicar y procesar los datos nuevamente en el servidor.

Otro problema es que la solicitud GET se puede almacenar en caché y redirigir, pero las solicitudes POST no.


Este enlace debe proporcionar una mayor comprensión de las respuestas proporcionadas:

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

Vamos a explicar, de una vez por todas, cuál es la diferencia entre WebInvoke y WebGet.

WebGet (comúnmente utilizado para recuperar datos)

El atributo WebGet expone operaciones usando el verbo GET. Puede acceder al punto final directamente desde un navegador web escribiendo el URI en el servicio en la barra de direcciones. Los parámetros se pueden enviar dentro del URI como parámetros de cadena de consulta o incrustados en el URI. El atributo WebGet debe usarse solo para la recuperación de datos debido a sus capacidades de almacenamiento en caché.

WebInvoke (comúnmente utilizado para entrada / actualización de datos) El atributo WebInvoke expone servicios que usan otros verbos HTTP como POST, PUT y DELETE. POST es el valor predeterminado, pero se puede cambiar estableciendo la propiedad Método del atributo. El atributo WebInvoke debe usarse solo para la entrada / actualización de datos.





rest