Sign inSign up

joseluisgs/ts-api-rest

By joseluisgs

•Updated over 5 years ago

Image
0

283

joseluisgs/ts-api-rest repository overview

⁠TypeScrip API REST

Ejemplo de un API REST realizada con TypeScript

TypeScript Docker NodeJS JS Style Licence GitHub

⁠Sobre el proyecto

El proyecto consiste en que tengas un ejemplo de API REST pero realizada con TypeScript con el objetivo de mejorar con tipos tus desarrollos.

assets/image.png

⁠Arquitectura y diseño

El diseño de esta API REST se corresponde con el patrón Servidor->Enrutador->Controlador->Modelo. El Servidor escucha en un puesto diversas peticiones. Las procesa según su ruta o punto de entrada y se las pasa al Enrutador. El Enrutador analiza la petición dependiendo de la ruta y se la pasa al Controlador correspondiente a dicha ruta que ejecutará el método indicado. El Controlador realiza el método indicado según la ruta consultando los modelos y almacenamiento para ello. El Modelo es la estructuración de los datos a tratar.

En todo momento se ofrece información de la petición en base a los códigos de estado HTTP.

⁠Modos de funcionamiento

Este proyecto está basado en dos modos de funcionamiento.

  • Memoria: Usando almacenamiento en memoria. Lo tienes en la rama Memoria.
  • MogoDB: Usando almacenamiento en MogoDB. Lo tienes en la rama MongoDB.

⁠Autenticación y Autorización: JWT y Middleware

Se ha implementado un sistema de atenticación y autorización basado en JWT y aplicando un Middleware para analizar si el usuario puede entrar a un recurso, ya sea por que está autenticado para ello (auth), o tiene permisos dependiendo su rol (grant). Se ha jugado con distintas políticas dependiendo del recurso y se puede adaptar a las distintas necesidades del problema.

⁠EndPoints

Los Endpoints para conectarse y consumir esta api rest, empiezan siempre por /api/vx/recurso, donde x es a versión de esta api, y recurso es el recurso a consumir, por ejemplo /api/v1/juegos.

MétodoRecursoAuten/Autor.Descripción
POSTuser/register--Registra un usuario/a
POSTuser/login--Se indentifica en el sistema y obtiene token de acceso
GET/user/idauthObtiene los datos del usuario/a con id indicado si pertenece a él/ella
PUT/user/idauthModifica los datos del usuario/a con id indicado si pertenecen a él/ella
DELETE/user/idauthElimina el usuario/a con id indicado si pertenecen a él/ella
GET/juegos--Obtiene todos las juegos
GET/juegos/id--Obtiene el juego con el id indicado
POST/juegosauthAñade el juego
PUT/juegos/idauthModifica el juego con el id indicado si pertenece al usuario/a
DELETE/juegos/idauthElimina el juego con el id indicado si pertenece al usuario/a
GET/filesauth, grant('ADMIN')Obtiene todos los ficheros. Solo Admin
GET/files/idauthObtiene datos del fichero con el id indicado si pertenece al usuario/a
GET/files/download/id--Descarga el fichero con el id indicado
POST/filesauthAñade el fichero
PUT/files/idauthModifica el fichero con el id indicado si pertenece al usuario/a
DELETE/files/idauthElimina el fichero con el id indicado si pertenece al usuario/a

⁠TDD: JEST

Se ha usado la librería Jest, con TypeScript para realizar los test siguiendo un enfoque TDD y Supertest para testear las peticiones HTTP a la API.

⁠Ejecución

Tareas que podemos ejecutar dentro de nuestra aplicación. Te recomiendo leer el fichero package.json:

- npm install: para instalar las dependencias.
- npm start (npm run start): ejecuta el entorno producción.
- npm run dev: compila el TypeScript en busca de errores.
- npm run dev:run: ejecuta el código en podo desarrollo.
- npm run dev:watch: ejecuta el código en modo observador.
- npm run build: construye la versión de distribución/producción (en el directorio build).
- npm test (npm run test): ejecuta todos los test.
- npm run test:coverage: obtiene el índice de cobertura del código.
- npm run test:watch: realiza los test mientras modificas el código.
- npm run test:sec: realiza los test de manera secuencial pues puede dar error al cerrar el servidor.

⁠Despliegue

⁠Docker

Esta API se puede desplegar con Docker si te gusta ya sea a través de su Dockerfile o a otraves de Docker Hub, para ello:

- docker build -t joseluisgs/joseluisgs/ts-api-rest .
- docker run -it -p 8000:8000 --rm --name ts-api-rest-1 joseluisgs/ts-api-rest
⁠Docker Compose

Se ha optimizado el uso de contenedores usando Docker Compose. De hecho el almacenamiento se ha implementado en un contenedor de tipo Volumen.

- docker-compose up -d
⁠Docker Hub

Disponible en: https://hub.docker.com/r/joseluisgs/ts-api-rest⁠

⁠Prueba y consumo

Puedes probar y consumir la API usando por ejemplo Postman y su fichero⁠.Deberás completar las llamadas que hagan uso de los tokens.

⁠Autor

Codificado con :sparkling_heart: por José Luis González Sánchez⁠

Twitter GitHub

⁠Licencia

Este proyecto esta licenciado bajo licencia MIT, si desea saber más, visite el fichero LICENSE⁠ para su uso docente y educativo.

Tag summary

Content type

Image

Digest

Size

93.2 MB

Last updated

over 5 years ago

docker pull joseluisgs/ts-api-rest