Недавно я работал в проекте, используя apollo-link-rest, чтобы сделать однородными различные вызовы (на разные конечные точки), которые использовало приложение. Некоторые конечные точки являются GraphQL, другие - остальными.
Одна из моих конечных точек отказала, поскольку ресурс, который я искал, не существовал, и поэтому выборка возвращала 404. Но с # 119 и # 142 (https://github.com/apollographql/apollo-link-rest/blob /master/src/restLink.ts#L1047).
Почему имеет смысл скрывать информацию из ответа? Можно ли это сделать на основе конфигурации?
Для многих компаний ошибка 404 является «нефатальной ошибкой» - это просто означает, что чего-то нет. Часто в ответе 404 нет «лишних» данных, поэтому возвращение null выглядело как модель, лучше всего подходящая для GraphQL. Основываясь на обсуждениях в №119 и за его пределами, казалось, что существует консенсус, что это приводит к более болезненному исходу, поэтому изменение было внесено.
Если вы все же хотите, чтобы это не удалось, вы можете написать свою собственную оболочку customFetch
которая будет выдавать ошибку при возникновении ошибки 404.
Спасибо @fbartho, думаю, это имеет смысл. Я думаю, что проблема в нашем случае заключается в том, что наша схема выглядит очень REST-y, что затрудняет работу без 404. Я продолжу и реализую свой собственный customFetch. Спасибо!
Я не думаю, что к ошибкам 404
нужно относиться по-другому, они по-прежнему являются ошибкой клиента.
@kevinrobayna Удалось ли вам обработать ошибку 404? У меня аналогичное требование. Мне нужно обработать ошибку 404. В настоящее время клиент apollo возвращает нулевые данные. пока я вижу это 404 в инспекторе сети.
@anasnain Мне пришлось обработать это в событии onCompleted
:
onCompleted: (data) => {
const token = data?.passwordRecoveryToken;
// Apollo client sends null on 404 errors: https://github.com/apollographql/apollo-link-rest/issues/119
if (!token) return handleEmailNotFound();
return onGoToVerifyCode({ tokenId: token.id, email: inputs?.email?.value });
},
Я поставил PR, чтобы восстановить 404 как обычные сетевые ошибки, чтобы совпасть с хорошими практиками REST API: https://github.com/apollographql/apollo-link-rest/pull/283