Primeiros passos com Prisma

Munir Ahmed Elsangedy
Codengage
Published in
3 min readJan 22, 2019

O uso de ORM's no desenvolvimento de software já é uma pratica comum principalmente para quem trabalha com frameworks, sua utilização facilita vários problemas no acesso e consumo a base de dados. O Prisma trouxe uma nova experiência no desenvolvimento de aplicação. Neste post será realizada uma introdução sobre o que ele é e como utiliza-lo.

Stickers

O que é?

Prisma é um projeto OpenSource e que segundo o próprio time pode ser considerado uma especie de ORM que substitui os tradicionais.

Prisma replaces traditional ORMs and custom data access layers with a universal database abstraction used via the Prisma client. It is used to build GraphQL servers, REST APIs & more. - https://prisma.io

Prisma é desenvolvido em Scala e você deve se perguntar, — "mas então só consigo usar ele com Scala?". A resposta é não, o Prisma é uma camada de acesso a base de dados, ele faz a abstração do acesso a base de dados e roda em um container Docker, que através de uma CLI fornecida por eles é realizado o acesso ao serviço.

Além da abstração ele também possui um gerenciador de migrações que controla todas as alterações na estrutura de dados do banco. Um gerador de código para várias linguagens como: JavaScript, TypeScript, Flow, Go. Suporte a múltiplas bases de dados como: MySQL, PostgreSQL, MongoDB (veja todas as bases suportadas). Acesso type-safe a base de dados incluindo filtros, agregações, paginação e transações. Modelagem de dados declarativa.

O código gerado é chamado de prisma-client que é uma api muito flexível que possibilita seu uso em diversos casos de uso, como REST APIs, CLIs, aplicações baseadas em microservices e GraphQL APIs. O prisma-client é compatível com o ecossistema Apollo, tem suporte padrão para subscriptions GraphQL e paginação estilo Relay, oferece segurança ponta-a-ponta e vem com um dataloader integrado para resolver o problema N+1.

Como Usar?

Primeiro temos que instalar a CLI global do Prisma:

$ yarn global add prisma

Neste exemplo vamos usar o Prisma Cloud, se você quiser executar localmente vai ser necessário o Docker na sua maquina, voce pode baixa-lo aqui.

Para usar o Prisma Cloud é necessário se registrar aqui e depois efetuar o login pela CLI:

$ prisma login 

Agora que temos tudo que precisamos para usar o Prisma podemos criar uma pasta para o exemplo e inicializar o projeto pela CLI:

$ mkdir prisma-example
$ cd ./prisma-example
$ prisma init

Você vai ver algo parecido com a imagem abaixo, usando as setas do teclado selecione a opção Demo server.

Prisma CLI init

Depois você seleciona qual região do servidor, o nome do serviço e o stage (dev). O ultimo passo é selecionar qual o tipo de código deve ser gerado, para esse exemplo vou selecionar TypeScript.

Após este passos o Prisma vai gerar e publicar um serviço, disponibilizar um endpoint para acesso, gerar o código do prisma-client, criar um arquivo onde vai ser feita a modelagem de dados e o arquivo yml de configuração.

O Prisma tem outro projeto chamado graphql-yoga que expõe de forma simples uma API GraphQL usando como base o apollo-server, aqui você pode ver um exemplo de uma API usando o Prisma como camada de acesso a dados.

Conclusão

Prisma é uma nova forma de acesso a dados, que resolve muitos problemas dos ORMs tradicionais e traz um poder enorme para o desenvolvimento de software. Alguns pontos chaves sobre o Prisma:

  • Tipagem de dados segura
  • Camada de acesso a dados
  • Agnóstico a banco de dados
  • Gerador de código automático
  • Gerenciador de estrutura de dados(migrations)
  • Query Engine de alta performance
  • Suporte a base dados relacionais e não relacionais
  • Suporte a transações
  • Suporte a query nativas
  • Não serve somente para GraphQL
  • Pode ser usado como microservice
  • Roda em um container Docker

Vocês podem encontrar várias informações a mais no próprio site do prisma e em sua doc que é atualizada com frequência.

Este foi meu primeiro post, se você puder deixar sua opinião sobre o conteúdo e a forma a qual ele foi abordado seria de muito valor :D

--

--