Este es un ejemplo práctico una "red social" en la cual se pueden crear usuarios, publicaciones, darles like y comentar.
Esta es solo la API, en esta se usaron las siguientes tecnologías: NestJS, Prisma (SQLite), JWT (Autenticación)
Para iniciar el proyecto, obviamente hay que configurar algunas cosas, compilar, etc. Aquí verás los comandos básicos.
Eres libre de usar el gestro de paquetes de tu gusto (Yarn, PNPM, etc).
npm install
Copia y pega el contenido dentro de .env.example
en un nuevo archivo .env
;
DATABASE_URL="file:./dev.db"
ACCESS_SECRET="mysecretkey" // Change this
npx prisma migrate dev --name init
npm run start:dev
Existen rutas protegidas, para acceder a ellas se les debe pasar un Header al momento de hacer una petición.
Authorization: Bearer <token>
Usted reemplazaría <token>
por el token que se obtiene al crear una cuenta o iniciar sesión.
En el caso que no se agregue ese Header a la petición, el token esté expirado/malformado o el contenido del Header sea inválido, el servidor responderá con un código 401
Unauthorized
-
-
(POST)
/login
: Iniciar sesiónBody:
{ "email": "...", "password": "****" }
-
(POST)
/register
: Crear cuenta.Body:
{ "username": "...", "email": "...", "password": "****" }
-
-
- (GET)
/profile
: Obtener el perfil actual. - (GET)
/:id
: Obtiene el perfíl de un usuario (por id). - (DELETE)
/profile
: Elimina la cuenta actual.
- (GET)
-
-
(GET)
/
: Obtiene todos los posts.Esta ruta tiene paginación, debera de pasarle algúnos parámetros de busqueda.
Representación en json:
{ "page": 1, // Indica cuál es la página. "limit": 10, // El límite de publicaciones por página. "userId": "...", // (Opcional) Filtra publicaciones de un usuario }
-
(GET)
/:id
: Obtiene una publicación por id. -
(GET)
/:id/like
: Si es que se le dió like a la publicación. -
(POST)
/:id/like
: Alterna el like a una publicación. -
(GET)
/:id/comments
: Recupera los comentarios a una publicación. -
(POST)
/:id/comments
: Crea un comentario.Body:
{ "content": "..." }
-
(POST)
/
: Crea una publicación.Body:
{ "content": "..." }
-
(PATCH)
/:id
: Edita la publicación.Body:
{ "content": "..." }
-
(DELETE)
/:id
: Elimina la publicación.
-