API Busca de CEP com Node.js Prisma e Express
Vou demonstrar como criar uma API para busca de CEPs utilizando o Prisma, uma excelente ferramenta para manipular banco de dados relacionais.
Para isso irei utilizar uma base de CEPs em SQLite, o link para download esta disponível no fim da página.
ATENÇÃO: Versão antiga utilizada para exemplo, Versão: 1.0.0 do Prisma
Para começar crie uma pasta chamada “api-busca-cep-prisma” e dentro dela execute o comando no terminal para iniciarmos o projeto:
npm init -y
Instalando o Prisma CLI
Vamos agora instalar usando o conceito de adicionar o prisma a um projeto existente.
Para isso vamos instalar o Prisma CLI como dependência de desenvolvimento em nosso projeto, no terminal execute o comando:
Para iniciar o projeto executamos o comando:npx prisma init
Note que foi criada a pasta prisma e dentro dela temos o arquivo schema.prisma.
Nesse arquivo iremos configurar nossa conexão a base dados.
No nosso caso iremos utilizar nossa base de CEPs em SQLite.
Copie o arquivo base_cep.db para a pasta prisma.
Agora vamos editar a conexão no arquivo schema.prisma modificando a propriedade datasource
Introspect
Agora vem a mágia do Prisma, o introspect. Utilizando esse recurso o Prisma irá gerar para gente todo o schema da nossa base, com os tipos de dados e relations tudo com um único comando.
No terminal execute:
No terminal execute:npx prisma introspect
Veja que ele alterou o arquivo schema.prisma adicionando as models refletindo a nossa base.
Agora para finalizar e gerar os arquivos do Prisma, execute no terminal:npx prisma generate
Esse passo é muito importante pois é ele que de fato gera os arquivos necessários em nosso node_modules.
Express
Para criarmos nossas rotas vamos utilizar o famoso Express. Para adicionar essa dependência em nosso projeto no terminal execute:
npm install express
Como nesse exemplo estamos utilizando o TypeScript, vamos instalar o pacote de tipos também para o express como dependência de desenvolvimento.
Para isso rode no terminal:
npm install @types/express -D
Início — Index
Agora crie uma pasta chamada scr na raíz do projeto e dentro dela o arquivo
index.ts
Dentro dele vamos importar a bibliotéca do Prisma, o Express e o bodyParser (que será importante para definirmos a resposta da nossa API como JSON).
Agora criamos a constante instânciando o prisma. e a app referênciando o express().
Logo abaixo adicionamos ao express a função bodyParser.json().
Logo após já podemos testar nosso servidor na porta 3333 (escolha a que quiser) com o comando app.listen()
TS-NODE e TYPESCRIPT
Se você não tiver essas dependências instaladas globalmente em sua aplicação, podemos adiciona-las ao no nosso projeto. Elas que irão compilar e rodar nosso arquivo .ts
npm install ts-node
npm install typescript
Testando o servidor
Após a instalação do ts-node e do typescript podemos testar nosso servidor com o comando no terminal:
ts-node ./src/index.ts
Realizando a consulta
Agora já podemos criar nossa rota para a consulta, antes do app.listen coloque o seguinte código:
Estamos criando a rota cep que irá receber um parâmetro também nomeado como cep. Pegamos esse parâmetro da requisição e colocamos na constante cep.
Agora podemos utilizar o método findOne para buscar apenas um registro.
Dentro dele colocamos a condição where. Veja que é muito simples realizar uma consulta no Prisma.
Para testar pare a execução do servidor (CTRL+C) e rode novamente. Pesquisando pelo CEP: 01001001 acessando a rota localhost:3333/cep/01001001 temos o seguinte resultado:
Relacionamentos — JOIN
Na consulta foi exibido apenas o cidade_id do CEP que buscamos, mas é muito fácil realizar relacionamentos com o Prisma, edite o código para o seguinte:
Utilizando o include conseguimos dizer quais os relacionamentos que queremos incluir no retorno.
E se o relacionamento no caso cidades tiver outro relacionamento como nesse exemplo o estados também podemos incluir.
Tudo isso graças ao mapeamento que é feito nas models geradas.
Melhorando o retorno
Para deixar o retorno mais amigável, vamos editar nosso código criando um objeto e colocando apenas os campos que interessam no nosso retorno. Segue o código da index.ts completo:
Conclusão e Download
O Prisma é uma ferramenta muito útil para quem quer montar APIs de forma rápida, principalmente para bases pré existentes. Ela possuí sim algumas limitações mas a cada nova versão isso vem melhorando.
Eu senti algumas dificuldades ao manipular registros (inserir, editar) principalmente utilizando o Typescript e necessitando das tipagens de variáveis e retorno. Se torna um pouco mais trabalhoso mas o resultado
é muito satisfatório.
A base de CEP em SQLite esta disponível para download aqui.
Os códigos estão disponíveis no meu GitHub