Skip to content

Plantilla/Starter para desarrollar servicios APIs con Node.js y GraphQL.

License

Notifications You must be signed in to change notification settings

fvena/didor-template-graphql-Old

Repository files navigation

Didor GraphQL Template

Plantilla/Starter para desarrollar servicios APIs con Node.js y GraphQL.

Características

Plantilla desarrollada con Node y Express para construir APIs con GraphQL.

  • Utiliza la próxima generación de Javascript con Babel.

  • Últimas características ES2017 como Async/Await.

  • CORS configurado.

  • Express + MySQL (mysql)

  • Mantiene y define el estilos de codificación con editorconfig.

  • Utiliza helmet para definir algunas cabeceras HTTP para la seguridad.

  • Carga variables de entorno desde archivos .env con dotenv.

  • Validación de las peticiones con validator

  • Compresión Gzip con compression.

  • Linting con eslint (airbnb-base).

  • Tests con mocha, chai y sinon.

  • Code coverage con istanbul and coveralls.

  • Git hooks con husky.

  • Logging con morgan.

  • Integración continua con gitLab.

  • Servidor GraphQL escalable: El servidor utiliza graphql-yoga basado en Apollo Server y Express.

  • GraphQL database: Incluye GraphQL database binding to Prisma (utiliza MySQL)

  • Tooling: Soporte Out-of-the-box para GraphQL Playground & seguimiento de las consultas

  • Extensible: Modelo de datos simple y flexible, fácil de ajustar y extender.

  • Configuración sencilla: Configuración preconfigurada graphql-config

Visite How to GraphQL para ver un tutorial bastante completo de GraphQL & Node.js. También Puede aprender más sobre como desarrollar un servidor con esta plantilla aquí.

Requerimientos Previos

Para poder utilizar esta plantilla necesitarás tener instaladas las siguientes herramientas:

Empezando

1. Clona el repositorio y hazlo tuyo

El primer paso será descargarte el proyecto.

Cuando se haya descargado, entra dentro del directorio donde se haya clonado, elimina la carpeta .git e inicia un repo nuevo. Ahora tendrás un repositorio limpio y listo para tu proyecto, sin los commits que he realizado durante el desarrollo de esta plantilla.

# Clonar el repositorio
$ git clone --depth 1 https://github.com/fvena/didor-template-graphql myproject

# Reiniciar git
$ cd myproject
$ rm -rf .git
$ git init
2. Define las variables de entorno

En el archivo .env_example tienes un ejemplo de las variables de entorno necesarias para levantar el proyecto.

En principio esta configuración debería hacer funcionar tu proyecto, aunque te recomiendo que modifiques el nombre de tu aplicación al menos.

# Copia en un nuevo archivo .env las variables de entorno
$ cp .env.example .env
3. Configurando Dockers

Este paso solo es necesario si es la primera vez que desarrollas de forma local un proyecto con GraphQL y Prisma.

El siguiente paso será levantar los contenedores docker necesarios:

  • prisma-db: Contenedor para la base de datos MySQL
  • prisma: Contenedor con un servidor Prisma para comunicarse con la base de datos.

Atención! Solo si quieres inicializar una instalación limpia puedes eliminar los contenedores antiguos y las respectivas imágenes antes:

# Recuerda que esto eliminará los datos almacenados en las bases de datos

# Eliminar todos los contenedores e imágenes a la vez
$ docker stop $(docker ps -a -q)  // Para todos los contenedores
$ docker rm $(docker ps -a -q)    // Elimina todos los contenedores
$ docker rmi $(docker images -q)  // Elimina todas las imágenes

# Eliminar contenedores e imágenes de uno en uno
$ docker ps -a                        // Lista todos los contenedores
$ docker rm ID_or_Name1 ID_or_Name2   // Elimina los contenedores
$ docker images -a                    // Lista todas las imágenes
$ docker rmi Image1 Image2            // Elimina las imágenes

# Comprueba que se han eliminado correctamente
$ docker ps -a                        // Lista todos los contenedores
$ docker images -a                    // Lista todas las imágenes

Para levantar los contenedores primero necesitar haber definido la contraseña de acceso de Prisma.

  1. Define la contraseña en docker compose: Define tu contraseña en el archivo docker-compose.yml en el campo managementApiSecret.

  2. Define la contraseña en tus variables de entorno: Indica tu contraseña elegida en el archivo .env en el campo PRISMA_MANAGEMENT_API_SECRET.

# Descarga las imágenes y levanta los contenedores
$ docker-compose up -d

# Comprueba que se han levantado los contendores prisma y prisma-db
$ docker ps -a
4. Descarga las dependencias del proyecto
$ yarn install
5. Crear la base de datos y arrancar el proyecto

El último paso es generar la base de datos y empezar a desarrollar.

Al generar la base de datos se creará una estructura basada en el esquema de datos definido en el archivo src/schemes/datamode.graphql. Más adelante cuando lo modifiques y crees tu propia estructura de datos, recuerda volver a ejecutar el comando prisma deploy para actualizar los cambios en la base de datos.

# Genera/Modifica la base de datos
$ yarn deploy

# Inicia la plantilla en modo desarrollo
$ yarn dev

Estructura del proyecto

.
├── /src/                               
│   ├── /schemas/                           
│   │   ├── /post/                      # Type folder
│   │   │   ├── /post.document.md/      # Type documentation
│   │   │   ├── /post.mutation.js       # Mutation resolvers
│   │   │   ├── /post.query.js          # Query resolvers
│   │   │   ├── /post.schema.graphql    # GraphQL schema type definitions
│   │   │   └── /post.test.js           # Test type
│   │   └── ...
│   ├── /database/
│   │   ├── /post.graphql               # Post datamodel type definitions       
│   │   └── /prisma.graphql   # Prisma schema autogenerated file       
│   ├── /utils/                         
│   │   ├── /merges.js                  # Herramientas para unir los resolvers y typedefs
│   │   └── /vars.js                    # Recoge las variables de entorno
│   └── /server.js                      # Configuración del servidor con graphql-yoga
│
├── .babelrc                            # Configuración de Babel
├── .editorconfig                       # ..
├── .env                                # ...
├── .env.example                        # ...
├── .env.test                           # ...
├── .eslintignore                       # ...
├── .eslintrc                           # ...
├── .gitignore                          # ...
├── .graphqlconfig.yml                  # ...
├── .prisma.yml                         # ...
├── CHANGELOG.md                        # ...
├── LICENSE                             # ...
├── package.json                        # ...
├── README.md                           # ...
└── yarn.lock                           # ...

Comandos

Desarrollo

# Inicia tu servidor GraphQL en `http://localhost:4000` _y_ abre el Playground de GraphQL
$ yarn dev

# lint tu código con ESLint
$ yarn lint

# Iniciar los tests con Jest
$ yarn test

# Inicia lint y los tests
$ yarn validate

# Compila el proyecto en la carpeta build
$ yarn build

# Genera/Modifica la base de datos
$ yarn deploy

# Genera datos de prueba en la base de datos
$ yarn seed

# Genera y abre la documentación de la api
# yarn docs

Producción

# Muestra los logs en producción
# pm2 logs

Inspiración

License

MIT License - Francisco Vena

About

Plantilla/Starter para desarrollar servicios APIs con Node.js y GraphQL.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages