Apollo-link-rest: 404 OK 响应返回 null 而不是错误

创建于 2019-07-15  ·  6评论  ·  资料来源: apollographql/apollo-link-rest


最近我在一个项目中工作,使用 apollo-link-rest 使应用程序使用的不同调用(到不同端点)同质化。 有些端点是 GraphQL,有些则是休息。

我的一个端点失败了,因为我正在寻找的资源不存在,因此获取返回 404。但是自从 #119 & #142 (https://github.com/apollographql/apollo-link-rest/blob /master/src/restLink.ts#L1047)。

为什么从响应中隐藏信息是有意义的? 这可以在基于配置的情况下完成吗?

help wanted 🛠 question❔

所有6条评论

对于许多公司来说,404 是一个“非致命错误”——它只是意味着缺少某些东西。 404 响应中通常没有“额外”数据,因此返回 null 似乎是最适合 GraphQL 的模型。 根据#119 和外部的讨论,似乎已经达成共识,认为这是默认的更痛苦的结果,因此进行了更改。

如果你仍然想让这个失败,你可以编写自己的customFetch包装器,当 404 发生时它会抛出一个错误。

谢谢@fbartho,我认为这是有道理的。 我认为在我们的案例中的问题是 out schema 看起来非常 REST-y,所以没有 404 就很难工作。我将继续实现我自己的 customFetch。 谢谢!

我不认为404错误应该区别对待,它们仍然是客户端错误。

@kevinrobayna你能处理 404 错误吗? 我也有类似的需求。 我需要处理 404 错误。 目前,阿波罗客户端返回空数据。 而我在网络检查器中看到它是 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 :

此页面是否有帮助?
0 / 5 - 0 等级