{"meta":{"title":"Сравнение REST API GitHub и GraphQL API","intro":"Узнайте о API GitHub, чтобы расширить и настроить интерфейс GitHub .","product":"REST API","breadcrumbs":[{"href":"/ru/enterprise-server@3.22/rest","title":"REST API"},{"href":"/ru/enterprise-server@3.22/rest/about-the-rest-api","title":"Сведения о REST API"},{"href":"/ru/enterprise-server@3.22/rest/about-the-rest-api/comparing-githubs-rest-api-and-graphql-api","title":"Сравнение API GitHub"}],"documentType":"article"},"body":"# Сравнение REST API GitHub и GraphQL API\n\nУзнайте о API GitHub, чтобы расширить и настроить интерфейс GitHub .\n\n## Сведения об API-интерфейсах %% данных variables.product.company\\_short %}\n\nGitHub предоставляет два API: REST API и API GraphQL. Вы можете взаимодействовать с обоими API с помощью GitHub CLI, curl, официальных библиотек Octokit и сторонних библиотек. Иногда функция может поддерживаться в одном API, но не в другом.\n\nВы должны использовать API, который лучше всего соответствует вашим потребностям и что вы наиболее комфортно используете. Вам не нужно использовать только один API через другой. Идентификаторы узлов позволяют перемещаться между REST API и API GraphQL. Дополнительные сведения см. в разделе [Использование глобальных идентификаторов узлов](/ru/enterprise-server@3.22/graphql/guides/using-global-node-ids).\n\nВ этой статье рассматриваются преимущества каждого API. Дополнительные сведения об API GraphQL см. в разделе [Сведения API GraphQL](/ru/enterprise-server@3.22/graphql/overview/about-the-graphql-api). Дополнительные сведения о REST API см. в разделе [Сведения о REST API](/ru/enterprise-server@3.22/rest/about-the-rest-api/about-the-rest-api).\n\n## Выбор API GraphQL\n\nAPI GraphQL возвращает именно запрашиваемые данные. GraphQL также возвращает данные в предварительно известной структуре на основе запроса. Напротив, REST API возвращает больше данных, чем запрошено, и возвращает его в предварительно определенной структуре. Кроме того, можно выполнить эквивалент нескольких запросов REST API в одном запросе GraphQL. Возможность сделать меньше запросов и получить меньше данных делает GraphQL привлекательным для разработчиков мобильных приложений.\n\nНапример, чтобы получить имя входа GitHub десяти подписчиков и имя входа десяти подписчиков каждого из ваших последователей, можно отправить один запрос, например:\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\nОтвет будет объектом JSON, который следует структуре запроса.\n\nВ отличие от этого, чтобы получить эти же сведения из REST API, необходимо сначала выполнить запрос `GET /user/followers`. API вернет имя входа каждого подписчика, а также другие данные о подписчиках, которые вам не нужны. Затем, для каждого последователя, вам потребуется выполнить запрос `GET /users/{username}/followers`. В общей сложности потребуется сделать 11 запросов, чтобы получить те же сведения, которые можно получить из одного запроса GraphQL, и вы получите избыточные данные.\n\n## Выбор REST API\n\nТак как интерфейсы REST API уже более длительны, чем API GraphQL, некоторые разработчики более комфортно работают с REST API. Так как REST API используют стандартные http-команды и понятия, многие разработчики уже знакомы с основными понятиями для использования REST API.\n\nНапример, чтобы создать проблему в `octocat/Spoon-Knife` репозитории, необходимо отправить запрос `POST /repos/octocat/Spoon-Knife/issues` в текст запроса JSON:\n\n```json\n{\n  \"title\": \"Bug with feature X\",\n  \"body\": \"If you do A, then B happens\"\n}\n```\n\nВ отличие от этого, чтобы устранить проблему с помощью API GraphQL, необходимо получить идентификатор `octocat/Spoon-Knife` узла репозитория, а затем отправить запрос, например:\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```"}