При использовании Graphql важно помнить, что он не связан с протоколом HTTP. Он работает с документами запросов, которые могут быть доставлены клиентами любым способом (HTTP, Files, Strings ...) и отвечает результатами документов.
Кроме того, представьте себе следующий документ запроса:
mutation {
first: firstMutation,
second: secondMutation,
}
Если первая ошибка мутации, но вторая была успешной, раздражает код состояния 400.
Вместо этого GraphQL использует результирующий документ для доставки возможных ошибок, например:
{
"data": {
"first": true,
"second": null
},
"errors": [
{
"locations": [
{
"column": 0,
"line": 2
}
],
"message": "some error",
"path": [
"first"
]
}
]
}
, где вы можете видеть, что первый дал результат, а второй имел ошибку. Обрабатывать такие ошибки должен клиент GraphQL, а не транспортный протокол.