{"meta":{"title":"Comparando a API REST do GitHub e a API do GraphQL","intro":"Aprenda sobre as APIs do GitHub para estender e personalizar sua experiência no GitHub.","product":"API REST","breadcrumbs":[{"href":"/pt/enterprise-server@3.22/rest","title":"API REST"},{"href":"/pt/enterprise-server@3.22/rest/about-the-rest-api","title":"Sobre a API REST"},{"href":"/pt/enterprise-server@3.22/rest/about-the-rest-api/comparing-githubs-rest-api-and-graphql-api","title":"Comparando as APIs do GitHub"}],"documentType":"article"},"body":"# Comparando a API REST do GitHub e a API do GraphQL\n\nAprenda sobre as APIs do GitHub para estender e personalizar sua experiência no GitHub.\n\n## Sobre as APIs de GitHub\n\nGitHub fornece duas APIs: uma API REST e uma API do GraphQL. Você pode interagir com ambas as APIs usando GitHub CLI, curl, as bibliotecas oficiais do Octokit e bibliotecas de terceiros. Ocasionalmente, um recurso pode ter suporte em uma API, mas não na outra.\n\nVocê deve usar a API que melhor se alinha às suas necessidades e que você fica mais confortável em usar. Você não precisa usar exclusivamente uma API, em detrimento de outra. As IDs de nó permitem que você alterne entre a API REST e a API do GraphQL. Para saber mais, confira [Usar IDs de nó globais](/pt/enterprise-server@3.22/graphql/guides/using-global-node-ids).\n\nEste artigo discute os benefícios de cada API. Para obter mais informações sobre a API do GraphQL, confira [Sobre a API do GraphQL](/pt/enterprise-server@3.22/graphql/overview/about-the-graphql-api). Para obter informações sobre a API REST, confira [Sobre a API REST](/pt/enterprise-server@3.22/rest/about-the-rest-api/about-the-rest-api).\n\n## Escolhendo a API do GraphQL\n\nA API do GraphQL retorna exatamente os dados que você solicita. O GraphQL também retorna os dados em uma estrutura conhecida previamente com base em sua solicitação. Por outro lado, a API REST retorna mais dados do que você solicitou e os retorna em uma estrutura predeterminada. Você também pode realizar o equivalente a várias solicitações de API REST em apenas uma solicitação do GraphQL. A capacidade de fazer menos solicitações e buscar menos dados torna o GraphQL atraente para desenvolvedores de aplicativos móveis.\n\nPor exemplo, para obter o login do GitHub de dez dos seus seguidores e o login de dez seguidores de cada um dos seus seguidores, é possível enviar uma única solicitação como a seguinte:\n\n```graphql\n{\n  viewer {\n    followers(first: 10) {\n      nodes {\n        login\n        followers(first: 10) {\n          nodes {\n            login\n          }\n        }\n      }\n    }\n  }\n}\n```\n\nA resposta será um objeto JSON que segue a estrutura de sua solicitação.\n\nPor outro lado, para obter essas mesmas informações da API REST, primeiro você precisará fazer uma solicitação para `GET /user/followers`. A API retornaria o logon de cada seguidor, juntamente com outros dados sobre os seguidores de que você não precisa. Em seguida, para cada seguidor, você precisaria fazer uma solicitação para `GET /users/{username}/followers`. No total, você precisaria fazer 11 solicitações para obter as mesmas informações que poderia obter de apenas uma solicitação do GraphQL e receberia dados em excesso.\n\n## Escolhendo a API REST\n\nComo as APIs REST existem há mais tempo do que as APIs do GraphQL, alguns desenvolvedores estão mais confortáveis com o primeiro tipo. Como as APIs REST usam verbos e conceitos HTTP padrão, muitos desenvolvedores já estão familiarizados com os conceitos básicos para utilizá-las.\n\nPor exemplo, para criar um problema no repositório `octocat/Spoon-Knife`, você precisaria enviar uma solicitação para `POST /repos/octocat/Spoon-Knife/issues` com um corpo de solicitação JSON:\n\n```json\n{\n  \"title\": \"Bug with feature X\",\n  \"body\": \"If you do A, then B happens\"\n}\n```\n\nPor outro lado, para criar um problema usando a API do GraphQL, você precisaria obter a ID do nó do repositório `octocat/Spoon-Knife` e, em seguida, enviar uma solicitação como:\n\n```graphql\nmutation {\n  createIssue(\n    input: {\n      repositoryId: \"MDEwOlJlcG9zaXRvcnkxMzAwMTky\"\n      title: \"Bug with feature X\"\n      body: \"If you do A, then B happens\"}\n  ) {\n    issue {\n      number\n      url\n    }\n  }\n}\n```"}