Я пытаюсь понять, в чем преимущества GraphQL. Я читал об уменьшении количества конечных точек и сложности ответов сервера, но похоже, что тех же результатов можно достичь только с помощью JS.
Вот пример объекта данных, который можно отправить как JSON на сервер узла с MongoDB. Это будет пример игрового приложения, в котором клиент получает информацию о пользователе:
let data = {
db: "users",
params: {_id: "xxxxx"},
fields: ["username", "level"],
games:
{
db: "games",
params: {userID: "xxxxx"},
fields: ["opponent”]
}
}
В этом примере db, params и fields будут стандартными ключами, а игры будут подобны специальному ключу для конкретной цели получения игр пользователя, однако синтаксис объекта games будет соответствовать тому же стандартному формату, что и общий объект данных.
Тогда на сервере запрос Mongo будет выглядеть примерно так:
db.collection(data.db).find(params)
Затем вы отфильтруете посторонние поля Mongo стандартным способом и ответите клиенту.
Я относительно новичок в JS, но думаю, что вы также можете связать обещания в зависимости от того, включены ли в объект данных определенные специальные ключи (например, «игры» сверху).
Похоже, что он дает те же преимущества, что и GraphQL, но с меньшей сложностью. Какие еще преимущества есть у GraphQL, которых нет у простого эквивалента JS?





Еще одно дополнительное преимущество - строгая проверка типов. Речь идет не только об агрегировании конечных точек, это решает проблему избыточной выборки (когда конечная точка предоставляет вам данные, которые вам не нужны) и недостаточной выборки (когда одного запроса конечной точки достаточно, чтобы получить все данные, которые вы хотите). GraphQL дает клиенту возможность выбирать то, что он хочет, конечная точка может использоваться в различных компонентах приложения, но только этот компонент знает, какие именно данные ему нужны, и может просто запрашивать эти данные.