Este proyecto es la construcción de una API en NodeJs y Express que se comunica con una base de datos MySQL.
La base de datos contiene tres tablas relacionadas entre sí: animes, personajes y dobladores.
La API consise en devolver el listado completo de animes registrados en formato JSON o el detalle de un anime según su ID. Cuenta con un sistema de registro y login para usuarios utilizando JSON Web Token (JWT). Al autenticarse correctamente, se genera un token de acceso que habilita las funcionalidades de añadir, editar y eliminar animes.
Se utilizan consultas parametrizadas que evitan un posible ataque a la base de datos por inyección de código SQL.
Al tratarse de un proyecto backend, se ha desplegado en Render.com y se ha empleado Swagger para documentar la API.
👇 Base de datos
- Animes.
- Seiyuus (actores de voz japoneses).
- Personajes relacionadas con foreign keys a las tablas de anime y seiyuus.
- Usuarios registrados.
👇 Anime endpoints
/animes
(GET): Obtener el listado completo de animes./animes/:id
(GET): Obtener info detallada de un anime por su ID.- Ejemplo: url/animes/2
/animes
(POST): Añadir un nuevo anime.-
Ejemplo: { "title": "Kimetsu no yaiba", "year": "2018", "chapters": "105" }
-
/animes/:id
(PUT): Editar información de un anime existente.- Ejemplo: url/animes/15
-
{ "title": "Kaze no Stigma", "year": "2023", "chapters": "10" }
/animes/:id
(DELETE): Eliminar un anime del listado.- Ejemplo: url/animes/19
👇 Users endpoints
/signup
(POST): Registro de nuevos usuarios.-
{ "username": "User", "email": "[email protected]", "password": "12345678" }
-
/login
(POST): Inicio de sesión para obtener un token de acceso.-
{ "email": "[email protected]", "password": "12345678" }
-
👇 Swagger endpoint
/api-docs/
Acceso a la interfaz de Swagger que permite interactuar con la API y utilizar sus funcionalidades sin necesidad de configuraciones adicionales.
- Para añadir (POST), modificar (PUT) o eliminar (DELETE) animes, se requiere autenticación.
- Se obtiene un token en la respuesta JSON del endpoint
/signup
o/login
. - Es necesario añadir este token en los "headers" de la petición:
{"Authorization": "token"}
Los 3 primeros animes de muestra no se pueden editar/eliminar. Puedes crear uno nuevo y manejarlo al gusto.
Por seguridad existe un número máximo de entradas posibles en la base de datos.
- Si intentas agregar nuevos datos y no puedes, prueba a borrar un anime existente.
- Si intentas registrar un usuario y no puedes, ponte en contacto conmigo o prueba con las siguientes credenciales. User:
[email protected]
Pass:123456578
Si usas el proyecto en local puedes aumentar o eliminar estos límites en el código.
👇 Postman o Swagger
Realiza peticiones con una herramienta tipo Postman a https://anime-seiyuus.onrender.com/
seguido del endpoint correspondiente.
Accede a la documentación en https://anime-seiyuus.onrender.com/api-docs/
para utilizar la interfaz interactiva y realizar peticiones directamente desde allí.
NOTA: Si obtienes un error de CORS selecciona el esquema adecuado: "HTTPS" o "HTTP".
👇 Pasos a seguir
NOTA: Necesitas tener instalado Node JS
- Clonar el repositorio.
- Instalar los módulos de NodeJS:
npm i
- Crear una base de datos MySQL:
db/anime_seiyuus_db_querys.sql
- Duplicar el archivo
.env_sample
y renombrar como.env
. - Rellenar
.env
:- Con los datos del servidor (local y/o remoto):
- Se puede tener uno o ambos servidores configurados pero solo se puede usar uno.
JWT_SECRET_KEY
: Clave personal segura para cifrar/descifrar las contraseñas de los usuarios.- Dejar como comentario los datos que no se vayan a usar según interese para evitar conflictos.
- Con los datos del servidor (local y/o remoto):
- Cambia en
swagger.json
el host:- De:
"anime-seiyuus.onrender.com"
- A:
"localhost:3113"
- De:
- Arranca el proyecto con:
npm run dev
- Uso de la API:
- Swagger:
http://localhost:3113/api-docs/
Si obtienes un error de CORS selecciona el esquema adecuado: "HTTPS" o "HTTP".
- Postman a la ruta
http://localhost:3113/
seguido del endpoint correspondiente.
- Swagger:
En este ejercicio he podido practicar y asentar:
- La creación y configuración de una base de datos SQL y el uso de claves foráneas.
- La creación y configuración de un servidor en express.
- Creación y uso de una API con varios endpoints.
- Manejo de registro y login con creación de token y middleware para autenticar un token.
- Creación de la documentación del API con Swagger.
- Manejar el servidor y la base de datos subidas en la nube.
- Creación de tests unitarios con JEST.
En un principio estaba todo el código en un solo archivo de 522 infumables líneas, así que me he puesto manos a la obra para modularizarlo.
También he unificado las respuestas de la api, una manera más limpia y coherente de trabajar, usando clases de Javascript.
De paso he revisado la documentación en Swagger y he pasado el aspirador, ordenando y renombrando para que sea más útil y fácil de entender.
En este proceso me llevo:
- Más conocimiento sobre los middleware.
- La librería Joi para validación de datos.
- Rutas y controladores.
- Router de express.
- Nodemon es muy útil pero la info de los errores no tanto.
- No es tan rápido refactorizar como parece. 🙃
- Tener una visión global y trabajar por módulos ayuda a poner mejores nombres a las variables.
¡Gracias por pasarte!