digital-garden/source/доклады/Изучаю GraphQL.md
2024-06-13 21:01:37 +03:00

33 lines
2.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## Плюсы
Позволяет клиенту запрашивать только те данные, которые ему нужны.
Снимает необходимость несколько раз обращаться за данными.
Уменьшает зависимость клиента от сервера.
Делает разработку более эффективной за счет декларативного описания данных для API.
## Минусы
Уязвимость для атак на исчерпание ресурсов из-за избыточно сложных запросов с большой вложенностью.
В GraphQL сложнее организовать ограничение доступа к данным. Каждый клиент может запросить почти всё, что хочет.
N+1 SQL-запросы (чтобы заполнить все поля-функции данными, может потребоваться новый SQL-запрос на каждое поле). У нас эта проблема решается использованием DataLoaderов.
Более сложный подход к кэшированию в связи с тем, что в GraphQL нет возможности использовать стандартные для многих механизмы HTTP-кэширования. Для формирования ответа запрос GraphQL должен обязательно дойти до бэкенда.
## Полезные материалы
Статьи:
* [Как упростить жизнь за 312 коротких шагов: проектируем GraphQL API в микросервисной архитектуре](https://habr.com/ru/post/698352/)
* [В этом репозитории очень много полезных советов](https://github.com/nodkz/conf-talks)
* [Статья от нашей компании](https://habr.com/ru/post/662594/)
* [Дополнительная статья от Quarkus](https://quarkus.io/blog/experimental_graphql/)
Доклады:
* [Дизайн GraphQL-схем — строим схемы правильно (версия 2) / Павел Черторогов](https://www.youtube.com/watch?v=tASEYJXdO_c&t=2450s)
## Комментарии
> Тоже встречал такую проблему, сложные запросы вешали сервер по нагрузке. Кучка маленьких рестов оказались много эффективнее.