Api Web y métodos GET

Iniciado por Zeros1001, 1 Septiembre 2016, 08:49 AM

0 Miembros y 1 Visitante están viendo este tema.

Zeros1001

Buenas a todos, he realizado un par de APIs de Login, por lo que sólo tenía 2 métodos GET, uno para obtener todos los usuarios y otro get(int id) para obtener sólamente uno.

Queriendo ampliar funcionalidad y toquetear un poco he querido añadirle un tercer método GET, que recoja el nombre get(string nombre). Claro el problema está en que cuando intento meterle un string me dice que no hay ningún id que coincida, entiendo que es porque ya existe un método que sólo acepte un parámetro en ese controlador.

La cuestión es que si creo otro controlador para eso se soluciona el problema, pero me gustaría saber si existe alguna manera de seguir las buenas costumbres de REST y además tener varios métodos GET en el mismo controlador que acepten el mismo número de parámetros. Ya que otra opción sería pasarle get(int id, string nombre) pero con esto tendría que pasar siempre una url con ?id={id}&nombre={nombre}, cuando se supone que la url debería quedar sólo con / no?

Si necesitáis que especifique más o que ponga ejemplos de código no habría ningún problema.

Gracias de antemano por todo. Saludos!!

Jeferi

La aproximación get(int, string) es adecuada mientras int pueda ser nullable.

Si el parámetro id y nombre son nullables podrías pasar uno u otro indistintamente, mientras que en el código compruebes si el id está definido pues buscas por id, pero sino buscas por nombre, y si no se pasan ninguno de los dos pues estableces un caso por defecto.

Zeros1001

comprendo lo que quieres decir, pero mi pregunta más bien es si en una API se pueden tener varios métodos GET con el mismo número de parámetros de entrada?

Si no se puede, desde luego la solución sería tener uno con todos los parámetros y que pudiesen ser nullables.

Gracias por todo y disculpa si no me he explicado bien.

eLank0

La única solución que se me ocurre es hacerlo mediante lenguajes tipados, de otro modo no se puede, ya que no hay manera de distinguir un método de otro.

Salu2

Neocortex

Otra sería que en tu query buscaras por uno u otro, en lugar de moverle la lógica a tus dos GET
Código (sql) [Seleccionar]

select [...] from user where user_id=:user_id
union all
select [...] from user where username=:username

union all porque es más eficiente que un or, dependerá de la magnitud de tu bd.

Saludos