Работать на проекте с надежным и понятным backend-API очень здорово. Список того, что нужно фронту от бекенда не очень-то и большой
Где-то есть асет, описывающий все что может прислать мне бекенд
Бекенд никогда не пришлет мне того, чего нет в описании. И мне никогда не придется искать null, спрятанный в мегабайтах JSONа
У фронта и бека есть контракт. Он распространяется на все их взаимодействия .
Множество сущностей, присылаемых с бекенда, строго ограничено потребностями моего интерфейса и у этих сущностей есть понятная мне связь.
Одна из технологий, которая выполняет все эти хотелки - GraphQL.
Когда я говорю о GraphQL я подразумеваю 2 вещи: формат запросов + execution engine который выдает ответы на мои запросы.
GraphQL не единственная технология, которая предоставляет строгий контракт. Так может делать RESTful апишка с OpenAPI (swagger) описанием.
Грубо говоря, RESTful + OpenAPI это некое обещание от вашего бекенда, а GraphQL – гарантия.
Ладно, я немного преувеличиваю и при желании сломать можно все что угодно :) Но, как показывает мой опыт, использую GraphQL очень сложно выстрелить себе в ногу.
GraphQL уже очень давно с нами, широко используется, но почему-то заблуждения насчет GraphQL все еще остаются.
Например, многие считают что GraphQL это что-то сверхгибкое, где можно попросить от бекенда все что угодно. Все ровно наоборот. GraphQL это строгая спецификация и ограничения.
Самая крутая фишка GraphQL – автоматически генерируемая документация. Для генерации доков не надо делать вообще ничего.
Полученные доки это замечательный референс, который позволяет экономить кучу времени при обсуждении формы вашего API.
Когда мне надо предложить какое-нибудь новое изменение в GraphQL API я просто кидаю расширение схемы в чатик
И мне не надо спрашивать бекендов "Как мне получить вот эту сущность?". Я просто тыкаю нужную ссылочу. При этом я точно знаю, что я получу ровно то что мне надо а не null или котика.
GraphQL может использовать любой транспорт. Пересылать данные можно почтовыми голубями. Однако чаще это делается по HTTP или веб-сокетам.
В GraphQL есть Subscription, который описывает стрим событий от сервера. Чудесный строго-типизированный стрим :)
Валидация запросов зашита в GraphQL engine. Если вы прислали невалидный запрос, GraphQL engine заботливо подскажет вам где вы ошиблись.
Конечно 500тку получить все же можно, если неаккуратно написать серверный код :)
Про схему и прикольные штуки которые можно с ней проделывать расскажу чуть попозже в отдельном тредике