Сложности работы с GraphQL, или Почему не стоит его использовать повсеместно
1. Внедрение GraphQL — это сложно. Поэтому перед практическим использованием выделите достаточно времени и ресурсов для изучения концепции и структуры.
2. Когда вы реализуете REST API, можете закэшировать ответ по каждому эндпоинту. В GraphQL запросы динамические, содержат разный набор полей и связей:
query {
user(id: 1) {
id
name
posts {
id
title
comments {
id
text
}
}
}
}
В этом запросе вы получаете данные из разных источников: пользователи, посты, комменты. Для оптимальной работы придётся продумывать более точечное кэширование.
3. А теперь представьте, что в запросе выше ещё больше вложенных запросов. По умолчанию GraphQL не ограничивает вас в глубине вложенности, что может вызвать шквал базовых запросов. Это сказывается на производительности сервера.
4. GraphQL не гарантирует атомарность выполнения нескольких мутаций:
mutation {
createPost(title: "New Post", body: "Content") {
id
title
}
updateAuthor(id: 1, name: "New Name") {
id
name
}
}
С одной стороны, это гибко и удобно, а с другой, — а что произойдет, если одна мутация пройдёт, а другая отвалится?
Поэтому не стоит жечь напалмом REST API и переписывать всё на новую технологию. GraphQL — удобный инструмент, но перед использованием важно понять, на каких проектах эта гибкость пригодится, а где будет лишней.
Больше об управлении разработкой — в нашем телегам-канале.