Sobes.tech
Junior

O que é GraphQL?

sobes.tech IA

Resposta da IA

O GraphQL é uma linguagem de consulta para APIs e um ambiente de execução para realizar essas consultas aos seus dados. Oferece uma alternativa ao REST, permitindo ao cliente solicitar apenas os dados de que necessita, numa única consulta.

Conceitos-chave:

  1. Esquema: Define os tipos de dados disponíveis na API, as suas relações e as operações disponíveis (consultas, mutações, subscrições).
  2. Consultas (Queries): Usadas para ler dados. O cliente indica quais os campos que precisa.
  3. Mutations: Usadas para modificar dados (criar, atualizar, eliminar).
  4. Subscrições (Subscriptions): Usadas para receber dados em tempo real através de uma ligação persistente (por exemplo, WebSocket).

Exemplo de consulta:

query GetUserData {
  user(id: "123") {
    name
    email
    posts {
      title
    }
  }
}

A resposta a esta consulta pode parecer assim:

{
  "data": {
    "user": {
      "name": "Ivan",
      "email": "ivan@example.com",
      "posts": [
        { "title": "O meu primeiro artigo" },
        { "title": "Sobre o GraphQL" }
      ]
    }
  }
}

Vantagens sobre REST:

  • Evitar a sobrecarga de dados (Over-fetching): O cliente recebe apenas os campos solicitados.
  • Evitar a subcarga de dados (Under-fetching) / Múltiplas consultas: Permite frequentemente obter toda a informação necessária numa única consulta, ao contrário do REST, onde podem ser necessárias várias solicitações a diferentes endpoints.
  • Tipagem forte: O esquema fornece documentação clara e validação das consultas.
  • Melhor desempenho: Menor volume de dados transmitidos.
  • Flexibilidade no lado do cliente: Os clientes podem evoluir independentemente do servidor, solicitando dados conforme necessário.

Desvantagens:

  • Complexidade na configuração do lado do servidor.
  • Problemas com cache em comparação com métodos padrão de cache REST (por exemplo, ao nível HTTP).
  • É mais difícil tratar erros em comparação com REST (que usa códigos de estado HTTP padrão).