Skip to content

rix3th1/salylearning-api

Repository files navigation

Documentación de la API de salylearning

La API de salylearning es una API RESTful que proporciona acceso a recursos como libros, usuarios, categorías, comentarios, etc. La API está diseñada para ser utilizada por la aplicación web de salylearning, pero también puede ser utilizada por otras aplicaciones que deseen consumir los recursos proporcionados por la API.

El lenguaje de programación utilizado para desarrollar la API es TypeScript y se basa en el paradigma de programación orientada a objetos y programación funcional. TypeScript es un superconjunto de JavaScript que agrega tipado estático y otras características a JavaScript, lo que hace que el código sea más seguro y fácil de mantener.

Está implementada utilizando Bun como entorno de ejecución y el marco de trabajo Nest.js. Bun es un entorno de ejecución de JavaScript y TypeScript basado en Deno que proporciona una API simple y segura para ejecutar código JavaScript y TypeScript en el servidor.

Bun es una alternativa a Node.js que proporciona una experiencia de desarrollo moderna y segura para los desarrolladores de JavaScript y TypeScript y es totalmente compatible con los módulos de Node.js y Deno. Nest.js es un marco de trabajo de Node.js que proporciona una arquitectura modular y escalable para construir aplicaciones web y APIs en Node.js y TypeScript

La API utiliza una base de datos MySQL para almacenar los datos y se comunica con la base de datos utilizando el ORM Prisma. La autenticación en la API se realiza utilizando tokens JWT, las imágenes se almacenan en Cloudinary. Para el envío de correos electrónicos se utiliza NodeMailer.

La API de salylearning proporciona una serie de endpoints que permiten a los usuarios realizar operaciones como registrarse, iniciar sesión, obtener información de libros, agregar comentarios, etc.

La API está alojada en Vercel y está disponible en la siguiente URL: https://salylearning.vercel.app.

La documentación de la API se genera automáticamente utilizando Compodoc. También se utiliza Swagger para una documentación más detallada de los métodos y parámetros de cada endpoint. La documentacíon se encuentra en la ruta /docs: https://salylearning.vercel.app/docs y la documentación de Swagger se encuentra en la ruta /docs/swagger: https://salylearning.vercel.app/docs/swagger.

Bun Logo Nest Logo

TypeScript Logo Prisma Logo JWT Logo

Vercel Logo Cloudinary Logo Nodemailer Logo

MySQL Logo Swagger Logo Compodoc Logo

Tabla de contenidos

Instalación

Para instalar y ejecutar la aplicación en desarrollo local, sigue estos pasos:

  1. Clona el repositorio de salylearning-api o bifurca el repositorio y clónalo desde tu cuenta de GitHub. Para clonar el repositorio, ejecuta el siguiente comando en tu terminal:
git clone https://github.com/rojasricor/salylearning-api.git
  1. Navega al directorio del proyecto:
cd salylearning-api
  1. Instala las dependencias utilizando Bun:
bun install
  1. Configura las variables de entorno necesarias para la aplicación.

  2. Ejecuta la aplicación en modo de desarrollo:

bun run start:dev

La aplicación ahora estará disponible en http://localhost:8000.

Note

Debes tener instalado Bun para ejecutar la aplicación. Puedes instalar Bun siguiendo las instrucciones de instalación.

Variables de entorno

La aplicación de salylearning utiliza variables de entorno para configurar la aplicación en diferentes entornos (desarrollo, producción, etc). Debes configurar las variables de entorno necesarias para la aplicación antes de ejecutarla. Puedes configurar las variables de entorno en un archivo .env en el directorio raíz del proyecto. Asegúrate de que el archivo .env no se incluya en el control de versiones y que no se comparta públicamente.

Para configurar las variables de entorno responsables del envío de correos electrónicos, debes habilitar el acceso de aplicaciones menos seguras en tu cuenta de Gmail. Puedes hacerlo siguiendo los pasos en este enlace. Luego debes proporcionar esos datos obtenidos en las variables de entorno GMAIL_USER y GMAIL_PASS.

La aplicación utiliza las siguientes variables de entorno:

  • DATABASE_URL - La URL de la base de datos de MySQL utilizada por la aplicación.

  • DEV_PROJECT_URL - La URL de la api cuando se está en desarrollo.

  • PROD_PROJECT_URL - La URL de la api cuando se está en producción.

  • JWTSECRET - La clave secreta utilizada para firmar los tokens JWT.

  • JWTEXPIRESIN - El tiempo de expiración de los tokens JWT.

  • GMAIL_USER - El correo electrónico de Gmail utilizado para enviar correos electrónicos.

  • GMAIL_PASS - Contraseña de applicaciones de Gmail.

  • GMAIL_SENDER - El nombre del remitente que aparecerá en los correos electrónicos enviados.

  • CLD_CLOUD_NAME - El nombre de la nube de Cloudinary para guardar las imágenes (Portadas de los libros, avatares, imágenes de perfíl, etc).

  • CLD_API_KEY - La clave de la API de Cloudinary.

  • CLD_API_SECRET - La clave secreta de la API de Cloudinary.

Caution

Asegúrate de que el archivo .env no se incluya en el control de versiones y que no se comparta públicamente.

Warning

Si alguna de las variables de entorno no está configurada, la aplicación no se ejecutará correctamente y mostrará un error.

Autenticación

La API de salylearning utiliza autenticación basada en Bearer Token, lo que significa que debes enviar un token de autenticación en tus solicitudes para acceder a los recursos protegidos, incluyendo un encabezado Authorization con el valor Bearer <token>. Los tokens de autenticación son generados por la API cuando un usuario inicia sesión y tienen una duración limitada JWT.

Para obtener un token de autenticación, debes enviar una solicitud POST a la ruta /auth/login con las credenciales de inicio de sesión en el cuerpo de la solicitud. A continuación se muestra un ejemplo de cómo iniciar sesión y obtener un token de autenticación:

const login = async () => {
  const response = await fetch('https://salylearning.vercel.app/auth/login', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({
      username: 'johndoe',
      password: 'Password123!',
    }),
  });

  const data = await response.json();
  const access_token = data.access_token;
  console.log(access_token);
};

login();

Important

Reemplaza username y password con las credenciales de inicio de sesión válidas.

Consumir endpoints con Fetch

Puedes consumir los endpoints de la API de salylearning utilizando la función fetch de JavaScript. A continuación se muestra un ejemplo de cómo consumir un endpoint utilizando fetch:

const fetchEndpoint = async () => {
  const token = 'your_token here';

  const response = await fetch('https://salylearning.vercel.app/<endpoint>', {
    method: 'GET',
    headers: {
      Authorization: `Bearer ${token}`,
    },
  });

  const data = await response.json();

  console.log(data);
};

fetchEndpoint();

Note

Reemplaza your_token_here con el token de autenticación que obtuviste al iniciar sesión.

Endpoints con subida de archivos (Imágenes de portadas de libros, avatares, etc)

Para consumir los endpoints que requieren subida de archivos, debes enviar una solicitud POST con un objeto FormData en lugar de un objeto JSON. La API de salylearning espera que el archivo se llame file en el objeto FormData. Asegúrate de que el campo de entrada de archivo en tu HTML tenga el id o nombre que la API espera.

A continuación se muestra un ejemplo de cómo subir una imagen utilizando fetch:

const uploadImage = async () => {
  const token = 'your_token here';

  const file = document.getElementById('file').files[0];
  const formData = new FormData();
  formData.append('file', file);

  // Aquí puedes agregar más campos al formData si es necesario, por ejemplo:
  // formData.append('nom_libro', 'El principito');

  const response = await fetch('https://salylearning.vercel.app/<endpoint>', {
    method: 'POST',
    headers: {
      Authorization: `Bearer ${token}`,
    },
    body: formData,
  });

  const data = await response.json();

  console.log(data);
};

uploadImage();

Important

Asegúrate de que el campo de entrada de archivo en tu HTML tenga el id o nombre que la api espera. En el ejemplo anterior, el campo de entrada de archivo debe tener el id file y la API espera que el archivo se llame file.

Note

Reemplaza your_token_here con el token de autenticación que obtuviste al iniciar sesión y <endpoint> con la ruta del endpoint que requiere subida de archivos (Ej: POST: /libros).

Para obtener más información sobre cómo consumir los endpoints de la API de salylearning, consulta la documentación de la API.

Tip

Si tienes alguna pregunta o problema, no dudes en crear un issue en el repositorio de GitHub.

About

A full restAPI for salylearning software bootstraped with nest.JS and documented with Swagger

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published