A construção de APIs com GraphQL tem se tornado uma escolha popular entre desenvolvedores, devido à flexibilidade e eficiência no gerenciamento de consultas. Neste post, vamos explorar como criar uma API GraphQL com Ruby on Rails utilizando o gem graphql
. A combinação do Ruby on Rails com o poder do GraphQL permite criar APIs rápidas e escaláveis, aproveitando a simplicidade e robustez do Rails.
Instalando o gem graphql
Para começar a criar uma API GraphQL com Ruby on Rails, o primeiro passo é adicionar o gem graphql
ao seu projeto. Isso pode ser feito com um simples comando no terminal.
gem install graphql
Ou, se estiver usando o Bundler, adicione a seguinte linha no seu Gemfile
:
gem 'graphql'
Em seguida, execute bundle install
para instalar o gem.
Gerando os Arquivos Iniciais
O gem graphql
oferece um gerador de arquivos para facilitar a criação da estrutura básica da API. Execute o comando abaixo para gerar o esqueleto do GraphQL:
rails generate graphql:install
Esse comando cria diversos arquivos, incluindo a configuração inicial de um schema, além de diretórios para as queries, mutations e tipos (types). A partir desse ponto, você pode personalizar e expandir a API conforme necessário.
Definindo o Schema
O schema do GraphQL é o ponto central de toda a API. Ele define como as queries e mutations podem ser executadas. Para criar uma API GraphQL com Ruby on Rails, é necessário definir os tipos de dados e como as consultas serão realizadas.
Dentro do arquivo app/graphql/types/query_type.rb
, você pode definir a primeira query da API. Por exemplo, uma query simples que retorna todos os usuários de uma base de dados poderia ser definida da seguinte maneira:
module Types
class QueryType < Types::BaseObject
field :users, [Types::UserType], null: false
def users
User.all
end
end
end
Essa query retorna todos os registros de usuários na tabela users
.
Criando Tipos Customizados
Os tipos são fundamentais para definir o formato dos dados que serão retornados pela API. Você pode criar tipos personalizados para representar os dados que deseja expor via GraphQL. Por exemplo, um tipo UserType
pode ser criado da seguinte forma:
module Types
class UserType < Types::BaseObject
field :id, ID, null: false
field :name, String, null: false
field :email, String, null: false
end
end
Esse tipo descreve a estrutura dos dados de um usuário, informando que cada usuário terá um id
, name
e email
.
Adicionando Mutations
Além das queries, as mutations permitem a criação, atualização ou exclusão de dados. Para adicionar uma mutation, crie um arquivo em app/graphql/mutations
e defina a mutation que deseja expor. Por exemplo, para criar um novo usuário, você pode definir uma mutation da seguinte forma:
module Mutations
class CreateUser < BaseMutation
argument :name, String, required: true
argument :email, String, required: true
field :user, Types::UserType, null: false
def resolve(name:, email:)
user = User.create!(name: name, email: email)
{ user: user }
end
end
end
Essa mutation cria um novo usuário no banco de dados com os parâmetros name
e email
, e retorna o objeto user
criado.
Testando a API GraphQL
Com a API GraphQL configurada, você pode testar suas queries e mutations diretamente no navegador. O Rails, com o gem graphql
, fornece uma interface interativa para executar testes na API. Para acessar, basta navegar até a URL /graphql
no seu navegador (ex: http://localhost:3000/graphql
).
No console GraphiQL, você pode testar as queries e mutations definidas. Por exemplo, para testar a query users
, basta executar:
{
users {
id
name
email
}
}
E para testar a mutation CreateUser
:
mutation {
createUser(name: "John Doe", email: "john.doe@example.com") {
user {
id
name
email
}
}
}
Conclusão
Ao seguir esses passos, você será capaz de criar uma API GraphQL com Ruby on Rails utilizando o gem graphql
. A integração entre Rails e GraphQL facilita a criação de APIs poderosas e flexíveis, permitindo que você expôsa dados de forma eficiente e performática.