As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Comparação entre REST e GraphQL
As APIs (interfaces de programação de aplicações) desempenham um papel fundamental ao facilitar a troca de dados entre aplicações. Conforme mencionado anteriormente, surgiram duas abordagens proeminentes para projetar APIs: GraphQL e REST. Embora ambas atendam ao propósito fundamental de permitir a comunicação cliente-servidor, elas diferem significativamente em seus casos de implementação e uso.
As abordagens GraphQL e REST compartilham várias características importantes:
-
Modelo cliente-servidor: ambas usam uma arquitetura cliente-servidor para troca de dados.
-
Ausência de estado: nenhuma das duas mantém as informações da sessão do cliente entre as solicitações.
-
Baseada em HTTP: ambas normalmente usam HTTP como o protocolo de comunicação subjacente.
-
Design orientado a recursos: ambas projetam seu intercâmbio de dados em torno de recursos, que se referem a quaisquer dados ou objetos que o cliente possa acessar e manipular por meio da API.
-
Flexibilidade de formato de dados: JSON é o formato de troca de dados mais usado em ambas, embora outros formatos, como XML e HTML, também sejam compatíveis.
-
Independente de linguagem e banco de dados: ambas podem funcionar com qualquer linguagem de programação ou estrutura de banco de dados, tornando-as altamente interoperáveis.
-
Suporte ao armazenamento em cache: ambas oferecem suporte ao armazenamento em cache, permitindo que clientes e servidores armazenem dados acessados com frequência para melhorar o desempenho.
Embora compartilhem alguns princípios fundamentais, GraphQL e REST diferem significativamente na abordagem para design de API e busca de dados:
-
Estrutura da solicitação e busca de dados
REST usa diferentes métodos HTTP (GET, POST, PUT, DELETE) para executar operações em recursos. Isso geralmente requer vários endpoints para diferentes recursos, o que pode levar a ineficiências na recuperação de dados. Por exemplo, executar uma operação GET para recuperar dados de um usuário pode resultar em busca excessiva ou insuficiente dos dados. Para obter os dados corretos, é possível chamar operações de truncamento ou várias operações.
GraphQL usa um único endpoint para todas as operações. Ele se baseia em consultas para buscar dados e em mutações para modificá-los. Os clientes podem usar consultas para buscar exatamente os dados de que precisam em uma única solicitação, o que reduz a sobrecarga da rede ao minimizar a transferência de dados.
-
Esquema do lado do servidor
REST não exige um esquema do lado do servidor, embora seja possível definir um opcionalmente para projeto e documentação eficientes da API.
GraphQL usa um esquema do lado do servidor fortemente tipado para definir dados e serviços de dados. O esquema, escrito na linguagem de definição de esquema (SDL) do GraphQL, inclui tipos de objetos e campos para cada objeto e funções de resolvedor do lado do servidor que definem operações para cada campo.
-
Versionamento
REST geralmente inclui versionamento no URL, o que pode levar à manutenção de várias versões da API simultaneamente. O versionamento não é obrigatório, mas pode ajudar a evitar alterações significativas.
GraphQL promove uma evolução contínua da API sem versionamento explícito, exigindo compatibilidade com versões anteriores. Os campos excluídos retornam mensagens de erro, enquanto as tags de depreciação eliminam gradualmente os campos antigos e retornam mensagens de aviso.
-
Tratamento de erros
REST tem uma tipagem fraca, exigindo que o tratamento de erros seja incorporado ao código ao redor. Isso pode não identificar automaticamente erros relacionados ao tipo (por exemplo, analisar um número como texto).
Por outro lado, GraphQL é fortemente tipado e requer uma definição de esquema abrangente. Isso permite que seu serviço identifique automaticamente muitos erros de solicitação com um alto nível de detalhes.
-
Casos de uso
REST é mais adequado para:
-
Aplicações menores com requisitos de dados menos complexos.
-
Cenários em que dados e operações são usados de forma semelhante por todos os clientes.
-
Aplicações sem necessidades de consultas complexas de dados.
GraphQL é mais adequado para:
-
Cenários com largura de banda limitada, em que é fundamental minimizar solicitações e respostas.
-
Aplicações com várias fontes de dados que precisam ser combinados em um único endpoint.
-
Casos em que as solicitações dos clientes variam significativamente e esperam estruturas de resposta diferentes.
Observe que é possível usar APIs GraphQL e REST em uma única aplicação para diferentes áreas de funcionalidade. Além disso, você pode atualizar uma API RESTful para incluir recursos de GraphQL sem uma reescrita completa. Consulte Como criar resolvedores GraphQL para fontes de dados da AWS
para ver um exemplo. -