viernes, 9 de enero de 2015

Asp.Net WebApi: Route con parámetros opcionales

Buenas, el articulo de hoy es cortito, conciso y posiblemente un poco trivial para quien esté acostumbrado a trabajar con webapi. Se explica como definir parámetros opcionales en una acción de un controlador tipo ApiController y como enrutarlos.

Imagina que necesitas enrutar esta acción:
[ResponseType(typeof (IEnumerable<UserFriendDTO>))]
public IHttpActionResult Get(int userId, bool? pending)
En primer lugar comentar que por defecto el template de proyecto WebApi que ofrece .net ya te enruta el Get con un parámetro Id (...) sin necesidad de definir ninguna ruta adicional. En este caso no me interesa filtrar un Get de UserFriend por Id del recurso sino que me interesa filtrar por UserId que es un atributo del recurso UserFriend y además me gustaría en algunas ocasiones decirle que sólo me devuelva las solicitudes pendientes de un usuario concreto...

En segundo lugar comentar que es un ejemplo poco RestFul, tal vez en este caso sería más correcto renombrar el recurso UserFriend a Friend y hacer algo así como Users/4/Friends?... pero bueno no lío más la cosa como ejemplo para el tema de opcionales en la acción ya valdría.

Tal y como tenemos esta acción nunca resolvería esta llamada, recibirás un Not Found.
api/UserFriend/4?pending=true
Veamos cual sería el modo correcto de hacerlo:
[ResponseType(typeof (IEnumerable<UserFriendDTO>))]
[Route("api/UserFriend/{userId}")]
public IHttpActionResult Get(int userId, bool? pending = null)
Esta acción queda asociada de este modo a estas 2 rutas:
api/UserFriend/4?pending=true
api/UserFriend/4
Ahora puedo decirle que me devuelva todas las solicitudes de un usuario concreto (sin pasar ningún valor en pending), que me devuelva sólo las pendientes (pending = true) o que me devuelva sólo las que están resueltas (pending = false).

Es importante que los parámetros opcionales los marquemos como nullable y además le asignemos un valor por defecto en la misma firma de la acción como veis en el segundo ejemplo.

Hasta aquí el primer articulo del año, recordar que podéis seguir areaTIC en las redes sociales y vuestros comentarios, criticas, correcciones o insultos (jajjaja) son bienvenidos.

Hasta la próxima!

No hay comentarios:

Publicar un comentario