- Programação

Criando uma API GraphQL com Ruby on Rails usando o gem graphql

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.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *