graphql 服务器端验证

Posted

技术标签:

【中文标题】graphql 服务器端验证【英文标题】:graphql server side validation 【发布时间】:2019-12-22 08:59:12 【问题描述】:

我只是想了解人们认为使用 graphql / orm 设置在服务器上验证用户输入文件(例如 url 或电子邮件地址)的最佳实践。

我的应用程序正在使用 apollo server / gql 和 sequelize 作为 orm。

我见过一些人在 sequelize 中对模型进行验证,以及在 graphql 解析器中使用验证库或使用自定义标量进行验证的其他示例。

有任何一种方式更可取吗?谢谢。

【问题讨论】:

【参考方案1】:

输入验证是某种AOP,如身份验证和授权。据我所知,有五种方法可以做到这一点。

使用一般方法在解析器中进行验证,例如if (validationPass) ... else .. - 过于冗长,保持解析器精简是最佳实践。因为它是某种路由层。不推荐 使用组合库在解析器中进行验证,例如graphql-resolvers - 推荐 使用一些装饰器或模型模式定义在模型层 (ORM) 中进行验证。 - 无论您使用 GraphQL、gRPC、soap WSDL、RESTful API,这都是传统的有效方式。源自经典的MVC软件开发思路。推荐 GraphQL 模式指令中的验证 - 有点复杂,不推荐 GraphQL 中的验证middleware - 有点复杂,您需要设计中间件并将验证规则映射到相应的 Query 和 Mutation,您很可能需要使用 info 参数来获取 GraphQL 操作。不推荐

【讨论】:

感谢您的概述。由于 Sequelize 已经支持它,所以我最终在模型层中进行了操作。

以上是关于graphql 服务器端验证的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Relay 处理服务器端输入验证?

如何从 GraphQL 模式创建验证规则

是否可以从 Relay 突变访问 GraphQL 验证错误?

寻找服务器端 GraphQL 订阅监听器的代码

JWT 身份验证:使用 UI 令牌对 Graphene/Django (GraphQL) 查询进行身份验证?

如何调试 nuxt-apollo 服务器端 graphql 请求