Чем он отличается от REST API?

По мере приближения к заключительному модулю Flatiron School я трачу больше времени на изучение объявлений о вакансиях разработчиков. Несколько месяцев назад, когда я просматривал описания ролей в разработке программного обеспечения, я сильно растерялся.

Было много незнакомых мне терминов и понятий. Но по мере того, как я продвигался по программе Flatiron, этот список иностранных концепций и сокращений - шаблон MVC, RESTful API, интерфейсные фреймворки и т. Д., К счастью, сократился.

Однако была одна технология, которая все еще была для меня новой и которая, как я заметил, чаще появлялась в описаниях должностей: GraphQL.

Итак, что такое GraphQL? Давайте посмотрим на определение из официальных документов:

«GraphQL - это язык запросов для API и среда выполнения для выполнения этих запросов с вашими существующими данными.

GraphQL предоставляет полное и понятное описание данных в вашем API, дает клиентам возможность запрашивать именно то, что им нужно, и не более того, упрощает развитие API с течением времени и предоставляет мощные инструменты разработчика ».

Это определение состоит из двух ключевых моментов:

  1. GraphQL - это «язык запросов для API».
  2. Это «дает клиентам возможность просить именно то, что им нужно, и не более того». Мы можем лучше понять эти концепции, рассмотрев краткий пример.

Рассмотрим приложение для ведения блога, в котором есть следующие ресурсы: сообщения, пользователи и подписчики. Приложение должно отображать заголовки сообщений определенного пользователя, а также трех последних подписчиков этого пользователя.

Давайте сначала рассмотрим, как мы можем получить доступ к этой информации с помощью типичного RESTful API.

С помощью REST API разработчикам потребуется обращаться к каждому ресурсу отдельно, чтобы получить доступ ко всем необходимым данным. Ниже приведена иллюстрация этого трехэтапного процесса.

RESTful API:

С другой стороны, с GraphQL мы можем просто использовать один запрос для доступа только к той информации, которая нам нужна.

GraphQL API:

Еще один способ подумать о том, чем GraphQL отличается от REST, - это рассмотреть, где определены ваши требования к данным.

В REST структура данных определяется самим API. Но с GraphQL требования к данным определяются клиентом, как показано ниже:

Теперь, когда мы рассмотрели краткий пример, иллюстрирующий некоторые преимущества GraphQL по сравнению с REST, как вы на самом деле используете GraphQL в проекте?

К сожалению, это не так просто и однозначно, как может показаться на последнем рисунке.

Для настройки проекта на использование GraphQL требуется несколько уровней инструментов. Стивен Меркатанте дает отличный обзор необходимых частей стека GraphQL, который включает клиентов, шлюзы, серверы GraphQL, традиционные серверы, серверы преобразования базы данных в GraphQL и саму базу данных.

Если вы хотите больше узнать о том, как GraphQL работает на практике, я настоятельно рекомендую ознакомиться с обзором Стивена:



GraphQL также предоставляет несколько серверных и клиентских библиотек для популярных языков программирования, включая Ruby и JavaScript. Для Ruby есть гем graphql-ruby; для клиентов JavaScript наиболее популярны библиотеки Relay и Apollo-Client.

Резюме

Подводя итог, можно сказать, что GraphQL предоставляет ряд преимуществ по сравнению с традиционными подходами к API, например, решение проблемы избыточной и недостаточной выборки данных, обычно связанной с RESTful API.

Однако, чтобы получить эти преимущества, разработчики должны понимать дополнительную сложность, которую GraphQL может добавить в стек проекта.

Поскольку GraphQL набирает популярность, я с нетерпением жду возможности узнать больше об этой многообещающей технологии и наблюдать за проектами, которые могли бы стать хорошими примерами использования для реализации GraphQL.