День 1176. #ЗаметкиНаПолях
GraphQL или REST API. Что Использовать? Начало
REST и GraphQL — это стандартные способы разработки серверных API. В последнее десятилетие REST API доминировали, и многие компании и разработчики активно используют его в своих проектах.
Но у REST есть некоторые ограничения, и есть другая доступная альтернатива — GraphQL.
GraphQL был разработан Facebook в 2012 году для внутреннего использования и обнародован в 2015 году. Это язык запросов для API и среда исполнения для выполнения этих запросов к вашим существующим данным. Цитата с официального сайта:
«GraphQL предоставляет полное и понятное описание данных в вашем API, дает клиентам возможность запрашивать именно то, что им нужно, и ничего больше, упрощает развитие API с течением времени и предоставляет мощные инструменты разработчика.»
Проблемы с REST API
1. Запрос нескольких конечных точек
2. Получение лишних данных
3. Неполная выборка и проблема n+1 запроса
4. Медленный отклик на меняющиеся требованиями клиента
5. Высокая связанность между внутренними контроллерами и внешними представлениями
Предположим, что нам нужно показать краткую информацию о пользователе: имя, должность и текст «о себе». С REST запрос будет GET по адресу /users/1. Проблема в том, что сервер возвращает фиксированную структуру данных с множеством ненужной информации. Например:
{
"id": 1,
"name": "John Smith",
"username": "jsmith",
"email": "[email protected]",
"title": "Software Engineer",
"phone": "9876543210",
"about": "As a software engineer my daily routine revolves around writing cleancode, maintaining infrastructure, and building scalable software systems.",
"website": "https://www.jsmith.tech",
"gender": "MALE",
"city": "Denver",
"state": "Colorado",
"country": "US",
…
}
Это добавляет в каждый запрос дополнительные данные, которые не требуются клиенту, что увеличивает размер полезной нагрузки и влияет на общее время ответа на запрос. Ещё хуже, если данные выбираются из нескольких таблиц, даже если клиенту этого не нужно.
GraphQL позволяет отправить запрос только нужных данных, который будет выглядеть примерно так:
{
user(id: 1){
name
title
about
}
}
Окончание следует…
Источник: www.freecodecamp.org/news/gr…rest-api