общем, библиотека из коробки базово работает с ошибками согласно graphql-протоколу - если они случаются, либа пишет в errors и отдаёт 200 (например, мы написали невалидный query, или ещё что-то случилось).
однако есть случаи, когда либа кидает GraphQLException (обёртка над RuntimeException), и при этом эксепшн не ловится/не обрабатывается библиотекой - и если не прописать уже свой сервисный код, чтобы словить их и добавить в errors, по понятным причинам клиент будет получать 500, хотя кажется ожидаемое поведение было бы получить эти ошибки в errors, согласно протоколу.
https://www.graphql-java.com/documentation/v13/exceptions/ - я про эту категорию ошибок, по крайней мере часть из них .
Как пример - UnknownOperationException . Формируем ExecutionInput:
ExecutionInput executionInput = ExecutionInput.newExecutionInput()
.query(query)
.operationName(operationName);
.build();
И после этого кидаем, например, такой запрос:
{"query": "query {
someField
}",
"operationName": "someOperationName"
указав явно в поле "operationName" , но при этом не указав (или указав неправильный) operationName после query, как тут:
{"query": "query someOperationName {
someField
}",
"operationName": "someOperationName"
Ну и в первом случае кинется GraphQLException.
Вопрос - кто-нибудь сталкивался с таким поведением? Почему так, в чём задумка для конкретно таких ошибок кидать рантайм эксепшны и не обрабатывать их либой?
ну 200 и 500 ошибки это ошибки на разных уровнях стека (200 ошибка на уровне приложения, 500 на уровне http сервера, по крайней мере в js/ts так), тут наверное не стоит их в одну объединять. Это как ошибка на уровне wifi, инетернета нет. и на уровне youtube (видео не грузятся). результат один (видос не посмотреть), но по сути ошибки разные. Лучше написать свой обработчик таких ошибок и реагировать на них. Как что происходит на java не знаю
Обсуждают сегодня