DEV Community 👩‍💻👨‍💻

Gustavo Carvalho Silva
Gustavo Carvalho Silva

Posted on

GraphQL para iniciantes

O que é GraphQL?

O GraphQL é um padrão de API criado pelo Facebook, que provê uma alternativa mais robusta e completa ao REST. Ele permite um maior controle da parte do cliente sobre os dados que serão requisitados da API, diminuindo problemas de overfetching dentro de uma aplicação.

O GraphQL não é voltado para um banco de dados ou serviço de armazenamento de dados, ou ainda para uma linguagem específica. Dessa forma o GraphQL funciona a partir dos dados já existentes dentro de uma aplicação, independente da linguagem no qual foi escrita.

Principais conceitos

Schemas e Types

Um schema é a estrutura básica do GraphQL, ele que define a estrutura da funcionalidade disponível para um cliente. Um schema é criado utilizando os types que permitem criar relacionamentos entre os dados, definir estruturas ou mesmo especificar os tipos de ações que podem ser realizadas pelos clientes.

type Hero {
    id: ID!
    name: String
    superpower: [String]!
    age: String
}

type Villain {
    id: ID!
    name: String
    sad_past: String
    age: String
}
Enter fullscreen mode Exit fullscreen mode

Query e Mutation

O GraphQL não utiliza os métodos HTTP para comunicação do que deve ser feito com os dados, em vez disso utiliza apenas o método POST para realizar suas ações. Dessa forma, o GraphQL trabalha sobre os próprios métodos para descrever os tipos de ações que devem ser realizadas. Esses métodos são os Types, Mutation e Query.

Query e Mutation são os tipos mais básicos dentro de um schema, o tipo Query serve pra se definir ações de consulta dentro do GraphQL, enquanto o tipo Mutation descreve ações de criação, atualização e exclusão de dados.

type Query {
    heros: [Hero]!
    hero(id: ID!): hero

    villains: [Villain]!
    villain(id: ID!): Villain
}

type Mutation {
    addHero(name: String, super_power: String): Hero
    addVillain(name: String, sad_past: String): Villain
}
Enter fullscreen mode Exit fullscreen mode

Vantagens e Desvantagens

Como nem tudo são flores (😆), podemos listar algumas vantagens e desvantagens em relação à utilização do GraphQL dentro de uma aplicação:

Vantagens

  • Diminui drasticamente a quantidade de rotas (geralmente há apenas uma hehe)
  • Diminui a quantidade de requisições feitas para a API
  • Provê uma tipagem dos dados disponíveis
  • Resolve o problema de overfetching
  • Mais performático que o REST (Ideal para aplicações móveis)

Desvantagens

  • Maior curva de aprendizado
  • Não utiliza os métodos HTTP além do POST
  • Mais complexo para implementar cache
  • Alta complexidade para upload de arquivos

Cabe sempre ao desenvolvedor, ou mesmo ao time de desenvolvedor analisar se as vantagens da implantação de uma ferramenta compensam as desvantagens e desafios que serão trazidos junto.

Quando usar?

Não há uma regra de quando o GraphQL deve ser utilizado numa aplicação, porém ele possui grande potencial em aplicações que lidam com grandes quantidades de dados, ou ainda que possuam problemas de overfething. Utilizar o GraphQL significa diminuir drasticamente a quantidade de dados trafegada entre a API e o Cliente tornando muito mais rápida essa comunicação.

O GraphQL tem ainda um grande potencial quando utilizado dentro de arquiteturas com microserviços, criando uma interface unificada de comunicação.

Em resumo, não há um cenário específico em que ele possa ser usado, ele possui problemas assim como qualquer ferramenta, mas pode ajudar bastante quando se precisa ter um controle melhor dos dados trazidos de uma API.

(Não existe bala de prata)

Referências

Top comments (0)

Timeless DEV post...

How to write a kickass README

Arguably the single most important piece of documentation for any open source project is the README. A good README not only informs people what the project does and who it is for but also how they use and contribute to it.

If you write a README without sufficient explanation of what your project does or how people can use it then it pretty much defeats the purpose of being open source as other developers are less likely to engage with or contribute towards it.