Как известно, спецификация graphql предусматривает информирование об ошибке одновременно с возвратом той части данных, которые удалось получить. И, в связи с этим, референсная frontend библиотека apollo даже имеет три стратегии обработки таких ответов:
1️⃣ игнорировать errors, если пришло хоть что-то в data
2️⃣ игнорировать data, если пришло хоть что-то в errors
3️⃣ не игнорировать ничего (и data и errors предлагается обрабатывать самостоятельно как вы хотите)
Глядя на эти политики, меня не покидает ощущение, что варианты 1️⃣ и 2️⃣ как будто сужают спецификацию, что для меня бы, как гипотетического бэкендера, выглядело странно: почему ты игнорируешь то, что я старательно тебе вернул? 😁
А вариант 3️⃣ представлен красивым примерчиком frontend-кода:
function ShowingSomeErrors() {
const { loading, error, data } = useQuery(MY_QUERY, { errorPolicy: "all" });
if (loading) return <span>loading...</span>;
return (
<div>
<h2>Good: {data.goodField}</h2>
<pre>
Bad:{" "}
{error.graphQLErrors.map(({ message }, i) => (
<span key={i}>{message}</span>
))}
</pre>
</div>
);
}
Внимание вопрос: если вы работаете с GraphQL, то какая стратегия обработки ошибок используется у вас?
И, если это 3️⃣ (не игнорировать ничего), то весь ваш фронтенд действительно обмазан и обработкой data, и обработкой error для всех запросов, где есть nullable fields?