[ Foro de C# ]

Web Services - REST

28-Jan-2014 12:13
Jorge Aguado
3 Respuestas

Buenos dias,

He seguido el tutorial http://www.codeproject.com/Articles/255684/Create-and-Consume-RESTFul-Service-in-NET-Framewor para crear un Web Service de tipo REST. Pero me surgen varias dudas, a ver si sabéis decirme :D

1. En el ejemplo tanto GetAPerson como GetAllPerson son métodos que serán invocados cuando se realice una petición al servicio web mediante el método GET. Entiendo que el servicio web diferencia el método a ejecutar dependiendo de si recibe parametro o no. Pero si quisiera tener dos procedimientos, uno que devuelve todas las coincidencias por nombre, y otro por edad, los dos recibirian un sólo parámetro. ¿Cómo podría definir un Web Service así, en el que puedan invocarse dos métodos mediante GET que ambos admitan un parámetro y que ejecute correctamente el deseado?

2. Existe algún lado donde ver como ejecutar peticiones GET/POST/UPDATE/DELETE desde javascript? (Creo que puede servir a la perfección el objeto XMLHttpRequest, pero por confirmar).



Muchas gracias a todos,
Un saludo


28-Jan-2014 12:39
Nacho Cabanes (+30)

No tengo tiempo de echar un vistazo a ese tutorial ahora, pero dos opiniones rápidas:

- Para tener dos métodos que respondan con datos distintos, te puedas bastar con pasar dos variables distintas por GET, de modo que sepas qué método llamar según el parámetro que recibas.

- Yo no analizaría los GET y POST desde Javascript, y menos aún haría UPDATE y DELETE de la base de datos, porque (aunque pudieras) es un lenguaje de navegador, y el usuario podría ver y alterar el código, con consecuencias terribles. Ese tipo de acciones deberías hacerlas desde un lenguaje de servidor, sea PHP, o ASP.NET, o lo que sea, según la plataforma para la que desarrolles.


28-Jan-2014 18:16
Jorge Aguado

Finalmente he encontrado la solución. Como ya había visto en otras búsquedas, basta con definir únicamente la Uri asociada al método. El problema es que no era capaz de Invocarlos mediante el browser y pensaba que estaba mal programado, pero no :)  Por ejemplo, para ejecutar 3 métodos diferentes dependiendo de el parámetro introducido:

       //GET OPERATIONS
       [OperationContract]
       [WebGet(UriTemplate = "")]
       string GetAllPerson();

       [OperationContract]
       [WebGet(UriTemplate = "1/{id}")]
       Person GetAPerson(string ID);

       [OperationContract]
       [WebGet(UriTemplate = "2/{age}")]
       Person GetAPersonByAge(string age);


Para invocar al primero basta con introducir en la barra de direcciones: http://localhost:56255/RestService/

Para invocar al segundo basta con introducir en la barra de direcciones: http://localhost:56255/RestService/1/1

Y para invocar al tercero basta con introducir en la barra de direcciones: http://localhost:56255/RestService/2/25


Mi problema fue que estaba intentando ejecutarlo mediante otras formas que encontré en google: Para invocar al primero basta con introducir en la barra de direcciones: http://localhost:56255/RestService/1?id=1.

En mi caso concreto, esto devuelve un error diciendo que no ha encontrado el Servicio (y parece lógico, puesto que entendería que el nombre del servicio es la última parte completa, "1?id=1").


Espero que os sirva a quien lo pudierais necesitar.


28-Jan-2014 23:29
Nacho Cabanes (+30)

Interesante... gracias por compartirlo.






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)