Plantilla/Starter para desarrollar servicios APIs con Node.js y GraphQL.
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).
-
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í.
Para poder utilizar esta plantilla necesitarás tener instaladas las siguientes herramientas:
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
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
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.
-
Define la contraseña en docker compose: Define tu contraseña en el archivo
docker-compose.yml
en el campomanagementApiSecret
. -
Define la contraseña en tus variables de entorno: Indica tu contraseña elegida en el archivo
.env
en el campoPRISMA_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
$ yarn install
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
.
├── /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 # ...
# 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
# Muestra los logs en producción
# pm2 logs