Foro de elhacker.net

Programación => Desarrollo Web => Mensaje iniciado por: Zeros1001 en 1 Septiembre 2016, 08:49 am



Título: Api Web y métodos GET
Publicado por: Zeros1001 en 1 Septiembre 2016, 08:49 am
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!!


Título: Re: Api Web y métodos GET
Publicado por: Jeferi en 7 Septiembre 2016, 17:23 pm
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.


Título: Re: Api Web y métodos GET
Publicado por: Zeros1001 en 8 Septiembre 2016, 08:39 am
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.


Título: Re: Api Web y métodos GET
Publicado por: eLank0 en 8 Septiembre 2016, 14:19 pm
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


Título: Re: Api Web y métodos GET
Publicado por: Neocortex en 9 Septiembre 2016, 00:52 am
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
  1. SELECT [...] FROM USER WHERE user_id=:user_id
  2. UNION ALL
  3. SELECT [...] FROM USER WHERE username=:username
  4.  
union all porque es más eficiente que un or, dependerá de la magnitud de tu bd.

Saludos