API Restful com Node.js, Express, Typescript, Sequelize, Postgres, Redis e Docker
- Published on
API Restful com Node.js, Express, Typescript, Sequelize, Postgres, Redis e Docker
Este artigo apresenta um repositório de código que implementa uma API Restful com as seguintes tecnologias:
- Node.js
- Express
- Typescript
- Sequelize
- Postgres
- Redis
- Docker
A API é simples e implementa um CRUD básico para uma entidade de usuários. Ela pode ser usada como um ponto de partida para a construção de APIs mais complexas.
Tecnologias utilizadas Node.js é uma plataforma de desenvolvimento de aplicações web e de servidor baseada no JavaScript.
Express é um framework web para Node.js que facilita o desenvolvimento de APIs Restful.
TypeScript é uma linguagem de programação fortemente tipada que é baseada no JavaScript.
Sequelize é um ORM que facilita o acesso a bancos de dados relacionais com Node.js.
Postgres é um banco de dados relacional popular.
Redis é um cache de memória não relacional.
Docker é uma plataforma de virtualização que facilita o desenvolvimento e a implantação de aplicações.
Instalação Para instalar a API, siga os seguintes passos:
Clone o projeto:
$ git clone git@github.com:robertolima-dev/api-reference-ts.git
Acesse o diretório do projeto:
$ cd api-reference-ts
Instale as dependências:
$ npm install
Inicie o Redis com Docker
$ docker run --name redis-client -v redisinsight:/db -p 8801:8001 -d -t redislabs/redisinsight:latest
Crie um arquivo .env e add:
########## MODE ENV ##########
NODE_ENV=development
########## API ENV ##########
PORT=4001
APP_SECRET=
########## DB ENV POSTGRES ##########
DB_HOST=
DB_USER=
DB_PORT=
DB_PASSWORD=
DB_NAME=
DB_DIALECT=
DB_POOL_ACQUIRE=30000
DB_POOL_IDLE=10000
DB_DIALECT=mysql
DB_POOL_MAX=10
DB_POOL_MIN=0
DB_OPERATOS_ALIASES=false
########## REDIS ENV ##########
REDIS_HOST=localhost
REDIS_PORT=6379
REDIS_PASS=
Rode as migrações:
$ npm run db:migrate
Inicie o projeto:
$ npm run dev
A API será iniciada no endereço (http://localhost:4001
).
Model:
Essa api já tem um model criado com os seguintes dados abaixo:
module.exports = (sequelize, DataTypes) => {
const User = sequelize.define(
'User',
{
name: DataTypes.STRING,
email: DataTypes.STRING,
password: DataTypes.STRING,
phone: DataTypes.STRING,
avatar: DataTypes.STRING,
status: DataTypes.BOOLEAN
},
{
timestamps: true,
paranoid: true
}
)
User.associate = function(models) {
}
return User
}
O CRUD já está pronto nas seguintes rotas: URL_BASE = (http://localhost:4001
)
POST:
(URL_BASE/api/v1/users
)
GET LIST:
(URL_BASE/api/v1/users
)
GET SHOW:
(URL_BASE/api/v1/users/:user_id
)
PUT:
(URL_BASE/api/v1/users/:user_id
)
DELETE:
(URL_BASE/api/v1/users/:user_id
)