Meh*_*ano 2 error-handling go graphql go-gin gqlgen
最近,我一直在将 GO REST API 更新为graphQl API,但遇到了无法使用 gqlgen 自定义状态代码的问题。
我得到的回应
标头
Status Code: 200 OK
Run Code Online (Sandbox Code Playgroud)
{
data: null,
errors: [
{message: "Unauthorized access", path: ["..."]}
]
}
Run Code Online (Sandbox Code Playgroud)
预期标题
Status Code: 401 UNAUTHORISED
Run Code Online (Sandbox Code Playgroud)
任何帮助将非常感激!
假设您有一个gqlgen与此类似的解析器:
func (r *queryResolver) SecretItems(ctx context.Context, userID string,
password string) ([]SecretItems, error) {
// ...
if !isAuthorized(userID, password) {
return nil, errors.New("Unauthorized access")
}
// ...
}
Run Code Online (Sandbox Code Playgroud)
那么所描述的行为是预期的。错误应作为响应正文的一部分返回。
GraphQL 与传输无关。虽然它通常通过 HTTP 提供服务,但也可以通过其他客户端-服务器协议提供服务。处理响应正文中的错误不需要对协议进行任何假设。因此,您不应依赖 HTTP 状态代码。
处理响应正文中的错误还有另一个优点:假设一个请求包含多个查询。他们中有些人成功了,有些人失败了。然后响应可以包含 下的成功查询的结果data以及与 下的失败查询相关的错误errors。
参考:
gqlgen 有关身份验证的文档包含返回 401 状态代码的示例。
为什么?这种情况发生在chi http 服务器上用作中间件的 http 处理程序中。GraphQL 解析器不会返回401 状态代码。
| 归档时间: |
|
| 查看次数: |
2541 次 |
| 最近记录: |