API Busca de CEP com Node.js Prisma e Express

Rodolfo Santos
4 min readJun 2, 2022

--

Capa da postagem

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:

Resultado da primeira consulta

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.

Resultado da consulta com JOIN

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:

Resultado final formatado

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

--

--

Rodolfo Santos

Dev Full Stack especialidades: PHP, Yii Framework, MySQL, HTML e CSS. Atualmente focado em JavaScript, TypeScript, Node.js e ReactJS / React Native ☕💻