gpt4 book ai didi

GraphQL:返回 null 与抛出错误

转载 作者:行者123 更新时间:2023-12-03 09:32:07 26 4
gpt4 key购买 nike

万一出现错误,我总是在想是否应该返回null或抛出错误。

假设我有一个类型 Person :

type Person {
firstName: String!
lastName: String!
}

我想让客户端搜索特定用户。这可以通过两种方式完成:

使用可空类型并可能返回 null当没有找到用户时:
type Query {
getPerson(firstName: String!): Person
}

使用不可为空的类型并在找不到用户时抛出错误:
type Query {
getPerson(firstName: String!): Person!
}

有没有正确的方法来做到这一点?

最佳答案

有趣的问题!

首先,我想争辩说,响应的“错误”部分实际上仅适用于开发人员错误(这意味着由开发人员在后端或前端引起的错误)。对于 API 被滥用时发生的错误,例如提供了错误的参数 (HTTP 400-403),或者内部出现问题 (HTTP 500)。在这种情况下,某些东西被破坏了,用户不需要采取任何行动,而是由开发人员采取行动。 not found (HTTP 404) 非常特殊,因为它通常是由您的 APP 用户引起的(例如,您尝试访问不存在的个人资料页面)。在这种情况下,我们希望直接向用户提供反馈。 “此配置文件不存在返回主页” 大多数客户端工具不能很好地处理 GraphQL 错误。这就是为什么应该向用户显示的错误应该是您的响应模式的一部分。 This awesome blog post更详细地讨论这个话题。

现在我认为你不需要返回一个专用的 GetPersonPayload输入您的 API,但肯定有可能:

type GetPersonPayload {
person: Person
errors: [PayloadError!]!
}

type Query {
getPerson(firstName: String!): GetPersonPayload
}

总结一下:我肯定会返回一个可为空的人,并且 - 取决于您的架构应该如何面向 future /企业 - 您甚至可能想要返回链接文章中所述的特殊有效负载类型。

关于GraphQL:返回 null 与抛出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49416650/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com