none
Consultas para desarrollar un WebAPI RRS feed

  • Pregunta

  • Hola buen dia, queria desarrollar un WebAPI en NET Core 3.0 utilizando code first para viajes y tengo algunas dudas

    Antes que nada comparto el modelo que realice



    Algunas de las dudas que tengo

    1- La tabla Users es para la autenticacion, no quiero que tenga registro, solo logueo, hace falta algun dato mas ademas del token? (quiero darlos de alta mediante INSERT por Base de datos)

    2- Si solo almaceno un token en la tabla, como funciona el mantener la sesion iniciada en el dispositivo por ejemplo si quiere mantener la sesion en dos dispositivos distintos?

    3- Es correcto utilizar Json Web Token?

    4- En cada peticion mediante HTTP que realice debo enviar el token y que el controlador realice la verificacion?

    5- En cuanto al protocolo HTTP, para obtener datos utilizo GET, para borrar DELETE y para enviar PUT o POST?. Cual seria el inconveniente o desventaja de borrar algo utilizando un POST por ejemplo

    6- Si quiero traer datos de dos clases distintas mediante Inner Join, debo crear clases intermedias combinando datos de ambas clases o hay otra manera?

    Estas son algunas dudas que tengo por ahora, espero puedan ayudarme


    Muchas gracias


    Saludos!




    miércoles, 23 de octubre de 2019 17:49

Respuestas

  • 1. Sí, la tabla Users puede funcionar así. No necesitas nada más. A no ser que quieras darles una duración limitada a los tokens, en cuyo caso tienes que añadir un campo para guardar la fecha/hora de generación del token.

    2. Con este mecanismo, no se necesita ninguna sesión; está pensado para ser "session-less", y en su lugar lo que ocurre es que a cada petición se vuelve a verificar el token en el servidor. Por decirlo de alguna manera, el token sería la propia sesión. Mientras un dispositivo (o varios) tengan conocimiento del token, lo reenvían en cada petición y el servidor reconoce automáticamente de quién viene la petición, sin necesidad de que haya que mantener una "sesión" en memoria.

    3. Puedes usar un JWT si te hace ilusión, pero es "matar moscas a cañonazos". Para esta aplicación te basta con algo mucho más sencillo, como por ejemplo generar un simple GUID cuando el usuario haga login y devolverle ese GUID como token.

    4. Sí. Cuando el programa cliente ha hecho login y recibido el token, lo guarda y en cada petición lo vuelve a enviar. El servidor lo busca en la tabla Usuarios (donde se guardó al hacer login) y si coincide entonces ya sabe que la llamada viene de ese usuario.

    5. Como poder, podrías hacerlo todo con POST y cambiar la url o algún parámetro para indicar la operación deseada. Pero si quieres seguir los estándares, entonces lo indicado es usar cada uno de los verbos http para su operación correspondiente (get, post, put delete para leer, añadir, modificar y borrar respectivamente).

    6. No es necesario crear clases intermedias. Puedes definir una clase con el contenido de los datos que quieres devolver, y cargarla directamente usando una Select que dentro tenga el join. Si usas linq-to entities, ni siquiera hace falta que definas la clase; puedes hacer el join con linq y que la query devuelva un tipo anónimo con los campos deseados, y el tipo anónimo se puede serializar directamente a json y devolverlo.

    miércoles, 23 de octubre de 2019 21:45
    Moderador

Todas las respuestas

  • 1. Sí, la tabla Users puede funcionar así. No necesitas nada más. A no ser que quieras darles una duración limitada a los tokens, en cuyo caso tienes que añadir un campo para guardar la fecha/hora de generación del token.

    2. Con este mecanismo, no se necesita ninguna sesión; está pensado para ser "session-less", y en su lugar lo que ocurre es que a cada petición se vuelve a verificar el token en el servidor. Por decirlo de alguna manera, el token sería la propia sesión. Mientras un dispositivo (o varios) tengan conocimiento del token, lo reenvían en cada petición y el servidor reconoce automáticamente de quién viene la petición, sin necesidad de que haya que mantener una "sesión" en memoria.

    3. Puedes usar un JWT si te hace ilusión, pero es "matar moscas a cañonazos". Para esta aplicación te basta con algo mucho más sencillo, como por ejemplo generar un simple GUID cuando el usuario haga login y devolverle ese GUID como token.

    4. Sí. Cuando el programa cliente ha hecho login y recibido el token, lo guarda y en cada petición lo vuelve a enviar. El servidor lo busca en la tabla Usuarios (donde se guardó al hacer login) y si coincide entonces ya sabe que la llamada viene de ese usuario.

    5. Como poder, podrías hacerlo todo con POST y cambiar la url o algún parámetro para indicar la operación deseada. Pero si quieres seguir los estándares, entonces lo indicado es usar cada uno de los verbos http para su operación correspondiente (get, post, put delete para leer, añadir, modificar y borrar respectivamente).

    6. No es necesario crear clases intermedias. Puedes definir una clase con el contenido de los datos que quieres devolver, y cargarla directamente usando una Select que dentro tenga el join. Si usas linq-to entities, ni siquiera hace falta que definas la clase; puedes hacer el join con linq y que la query devuelva un tipo anónimo con los campos deseados, y el tipo anónimo se puede serializar directamente a json y devolverlo.

    miércoles, 23 de octubre de 2019 21:45
    Moderador
  • Muchas gracias, voy a estar probando con las aclaraciones que me hiciste
    jueves, 24 de octubre de 2019 19:07