Pressione enter para ver os resultados ou esc para cancelar.

Hands ON: API GraphQL+ REST com Hasura em minutos – Parte 1

Mas que diabos é Hasura?

Hasura é uma engine open source de GraphQL (e agora REST também), muito poderosa que facilita o trabalho de desenvolvimento de uma API, contando com diversas funcionalidades de segurança, monitoramento, geração automática de tipos e operações GraphQL, etc.

Com Hasura você pode rapidamente colocar uma API no ar, com escalabilidade, performance, e tudo que deixa uma pessoa desenvolvedora e os clientes felizes!

Então, nesta primeira parte do artigo vamos construir uma API GraphQL contendo dados sobre álbuns, músicas e artistas para demonstrar algumas das funcionalidades que o Hasura nos oferece!

Pré requisitos:

  • Entender um pouco sobre Banco de dados SQL
  • Ter uma base sobre Web Services, requisições e headers.
  • Conhecer ao menos superficialmente REST e GraphQL

Subindo o Hasura

Para instanciar o Hasura e começar nossa brincadeira temos diversas opções, na documentação há vários exemplos, incluindo alguns de 1 clique. Minha sugestão é que você suba pelo Hasura Cloud, pois ele inicia com planos gratuitos e escala horizontalmente através de arquitetura serverless, permitindo que você se preocupe com outras questões e deixe a infra com o pessoal do Hasura Cloud.

Vamos utilizar essa solução nesse tutorial, mas fique tranquilo se você tem a necessidade de subir em sua própria plataforma, pois é possível fazer isso com simplicidade também.

Então vamos lá, acesse o site e faça sua conta utilizando seu e-mail ou Github. Essa tela vai aparecer pra você já com um projeto inicial configurado!

Fonte: produzida pelo autor

Clique em launch console e voilá, sua instância Hasura está pronta! Será?

Fonte: produzida pelo autor

P.S.: Essa janela no canto inferior direito parece ter informações interessantes para recém chegados, quem sabe você dá uma olhada?

Bom, na verdade ainda falta um detalhe, precisamos de um banco de dados para poder persistir os registros.

Clique na aba “DATA”, no menu superior. Você pode observar que é possível conectar na sua base de dados utilizando um banco de dados já existente (postgres ou MS Server, futuramente o Hasura irá suportar também MySQL) ou você pode criar um banco de dados no Heroku gratuitamente. Para o nosso tutorial vamos usar o banco de dados no Heroku, mas saiba que você pode instanciar sua base de dados em um serviço externo como Amazon RDS ou como achar melhor.

Fonte: produzida pelo autor

Clique em Create Heroku Database -> Create Database

Faça login ou registro no Heroku (não se preocupe, não irá custar 1 centavo.)

Autorize o acesso do hasura-cloud-production ao Heroku e ele irá automaticamente criar um banco de dados postgres e conectá-lo ao Hasura pra você!

Fonte: produzida pelo autor

Pronto! agora podemos começar a modelar.

Criando estrutura de dados

Antes de começar a criar nossas tabelas, vamos definir qual objetivo da nossa aplicação fictícia para esse tutorial.

Como eu gosto muito de música, vamos fazer uma API onde seja possível inserir álbuns musicais, artistas e músicas.

Para criar a primeira tabela, selecione o schema public no seu banco de dados, no menu lateral e clique no botão Create Table 

Fonte: produzida pelo autor

Tabela artist

Vamos começar criando uma tabela para artistas.

No campo table name, preencha com “artist”

RAGED READER: MAS ALISON, NOME DE TABELA NO SINGULAR OU NO PLURAL? 

Fonte: Giphy

O nome da tabela pode ser o que você quiser, o banco é seu, be happy!

Isso só é relevante dentro de um contexto, e eu não sei qual é o seu. No meu caso particularmente prefiro sempre usar singular. 

Nas colunas, aproveite o botão + Frequently used columns para adicionar automagicamente uma coluna de id. Vamos com a primeira opção que é um incremental inteiro simples. 

Fonte: produzida pelo autor

Observe as opções created_at e updated_at que são colunas extremamente úteis de se ter na aplicação para auditoria, etc. O Hasura facilita a criação delas, inclusive com o valor default now() que irá preencher a coluna com o datetime correspondente ao momento de inserção/atualização do dado. Mas vamos deixar isso de lado nesse tutorial.

Além do id vamos ter também o name do artista que pode ser um tipo text. Não se esqueça de marcar Unique para o id, já que será nossa chave primária.

Fonte: produzida pelo autor

Agora basta clicar em Add Table e temos nossa tabela.

Fonte: produzida pelo autor

Fácil, né? Fique à vontade se você preferir construir sua estrutura de dados acessando direto o banco e utilizando alguma ferramenta, também é possível. Para o tutorial vamos seguir criando as outras tabelas aqui pelo console.

Tabela album

Para nossa tabela album vamos com uma estrutura mais ou menos assim: 

Fonte: produzida pelo autor

Porém, agora vamos trabalhar com chaves estrangeiras. Todo album pertence a um artista, logo ele terá um campo artist_id apontando para o campo id do artist. Para configurar isso no Hasura, clique em Add a foreign key logo abaixo dos campos mostrados acima, e preencha dessa forma:

Fonte: produzida pelo autor

Observe que há um campo para selecionar a estratégia no caso de violação de update e de delete, isso significa que se você atualizar ou deletar um campo com chave estrangeira, ele pode bloquear a operação (restrict) ou trabalhar com outras estratégias como o cascade. Vamos deixar assim por hora.

Clique em Save e Add Table.

Tabela song

Faça como nas anteriores:

Fonte: produzida pelo autor

Não esqueça de preencher a foreign key como fez na tabela de album!

Com as 3 tabelas finalizadas, temos nosso banco quase pronto para ser utilizado.

Fonte: produzida pelo autor

Transferindo os relacionamentos para o GraphQL

Um passo importante é fazer o tracking das tabelas pelo GraphQL, para que a engine do Hasura aplique os relacionamentos nas queries e mutações do GraphQL.

Para isso clique em data e Track All, na seção Untracked foreign-key relationships

Fonte: produzida pelo autor

Vai ficar assim:

Fonte: produzida pelo autor

Conclusão

Temos agora a estrutura da nossa API pronta. Tranquilo até aqui, não é mesmo?

Na parte 2 deste artigo iremos popular nosso banco de dados utilizando mutations GraphQL e ver também como podemos configurar o Hasura para servir uma API REST com essa mesma estrutura e dados.

Muito obrigado pela sua atenção e fique no aguardo porque em breve teremos a parte 2 por aqui, enquanto isso, confira esse posts aqui do Blog também 😀 

Escrito por Alison VargasLinkedin