REST API или GraphQL
Вы, наверное, слышали о GraphQL, но, возможно, не совсем уверены, чем и отличается ли он от REST. Тогда вам повезло! Сегодня мы рассмотрим некоторые основы, касающиеся REST и GraphQL, а также различные варианты использования каждого из них.
REST API
API REST (передача репрезентативного состояния) — это архитектурный стиль интерфейса прикладной программы (API), который использует HTTP-запросы для доступа к данным и их использования. Эти данные можно использовать для типов данных GET, PUT, POST и DELETE, что относится к чтению, обновлению, созданию и удалению операций, касающихся ресурсов.
RESTful API использует методы HTTP для выполнения процессов CRUD (создание, чтение, обновление и удаление) при работе с данными.
Чтобы облегчить кэширование, AB-тестирование, аутентификацию и другие процессы, заголовки предоставляют информацию клиентам и серверам.
В теле хранятся данные, которые клиент хочет передать на сервер, например полезная нагрузка запроса.
API-интерфейсы GraphQL
GraphQL — это язык запросов для API и среда выполнения для выполнения этих запросов с использованием существующих данных. GraphQL обеспечивает полное и понятное описание данных в вашем API, дает клиентам возможность запрашивать именно то, что им нужно, и не более того, упрощает постепенное развитие API и предоставляет мощные инструменты разработчика.
Благодаря популярным известным организациям, таким как Twitter, Expedia, Shopify и многим другим, GraphQL получил широкое распространение и в основном поддерживается и развивается GraphQL Foundation.
GraphQL против REST:
Ключевое различие между GraphQL и REST API заключается в том, что GraphQL — это язык запросов, а REST — это архитектурная концепция сетевого программного обеспечения.
Опять же, способ доставки данных клиенту — это то, где GraphQL и REST расходятся больше всего. В дизайне REST клиент отправляет HTTP-запрос, а данные возвращаются в виде HTTP-ответа. В архитектуре GraphQL клиент отправляет запросы для получения данных.
Типичные сценарии
REST API
Допустим, у вас есть API для получения данных об учениках. В типичном сценарии REST запрос/ответ будет выглядеть так:
// HTTP REQUEST GET api/students/1 || api/students?id=1 // HTTP RESPONSE { "id": 1 "name": "john doe", "class": 3, "age": 11 }
В приведенном выше примере ответом на запрос, отправленный на сервер, будет объект всех данных об ученике с id 1.
Иногда это может занять больше времени в зависимости от размера данных из-за чрезмерной выборки данных. ОТДЫХ
GraphQL
В GraphQL данные извлекаются путем строгого указания количества необходимых полей. Это ограничивает получение всех данных одновременно. Рассмотрим приведенный ниже GIF для получения пользовательских данных с помощью GraphQL.
Что следует учитывать при выборе между GraphQL и REST
Безопасность
REST API использует HTTP, обеспечивает шифрование с использованием Transfer Layer Security и предоставляет различные варианты аутентификации API. TLS гарантирует, что передача данных между двумя системами является конфиденциальной и неизменной. Веб-токены, поддерживающие нотацию объектов JavaScript (JSON), завершают процесс аутентификации HTTP для безопасной передачи данных из веб-браузеров.
Элементы управления безопасностью GraphQL не так развиты, как в REST API. Чтобы использовать текущие функции, такие как проверка данных в GraphQL, разработчикам необходимо разработать новые методы аутентификации и авторизации.
Удобство использования
REST API использует методы URI и HTTP, из-за чего API сложно предвидеть, что произойдет при контакте с новой конечной точкой. Отсутствие определенных требований к версионированию в REST позволяет поставщикам использовать собственный метод.
С помощью GraphQL вы можете отправить запрос к своему API и получить точный ответ без необходимости дополнительных дополнений. В результате чрезвычайно предсказуемые ответы на запросы GraphQL обеспечивают хорошее удобство использования. GraphQL использует простую методологию и не версионирует API.
Производительность
Разработчики могут получать данные с помощью GraphQL всего за один запрос API. Чтобы избежать недостаточной или избыточной выборки данных, гибкий стиль определяет структуру информационных запросов и возвращает ту же структуру с сервера.
REST API, в отличие от GraphQL, имеют жесткие структуры данных, которые могут сначала возвращать нерелевантную информацию (чрезмерная выборка). Поскольку запросам требуется время, чтобы получить нужные данные и предоставить соответствующую информацию, разработчикам приходится делать несколько вызовов.
Кэширование
Все конечные точки GET для REST API можно кэшировать на сервере или через CDN. Они также могут храниться клиентом для регулярного использования и кэшироваться браузером. GraphQL предоставляется через одну конечную точку, обычно (/graphql), и отличается от спецификации HTTP. В результате запросы не могут кэшироваться так же, как REST API.
Однако благодаря доступным инструментам кэширование на стороне клиента превосходит REST. Схема и система типов GraphQL используются некоторыми клиентами, использующими уровни кэширования (клиент Apollo, URQL), что позволяет им хранить кеш на стороне клиента.
Обработка ошибок
Каждый запрос GraphQL, успех или ошибка возвращает код состояния 200. Это заметная разница по сравнению с REST API, где каждый код состояния указывает на определенный тип ответа.
Ошибки REST API могут иметь любой код, отличный от 200, и клиент, обрабатывающий ошибку, должен знать все возможные коды.
Любой законный ответ в GraphQL должен быть равен 200, включая данные и ответы об ошибках. Инструменты на стороне клиента помогут более эффективно управлять ошибками. Ошибки обрабатываются как часть тела ответа в рамках конкретного объекта ошибок.
Заключение
Давайте подведем итог тому, что мы обсуждали выше.
Мы надеемся, что благодаря тщательно продуманным различиям, описанным выше, вы сможете выбрать, какую из технологий использовать в зависимости от вашего варианта использования.