graphql 服务器端验证
graphql server side validation
我只是想了解人们认为什么是在服务器上使用 graphql / orm 设置验证用户输入文件(例如 url 或电子邮件地址)的最佳实践。
我的应用程序使用 apollo server / gql 和 sequelize 作为 orm。
我见过一些人在 sequelize 中对模型进行验证,以及在 graphql 解析器中使用验证库或使用自定义标量进行验证的其他示例。
有哪一种方式更可取吗?谢谢。
输入验证是某种AOP,例如身份验证和授权。据我所知,有五种方法可以做到这一点。
- 使用通用方法在解析器中进行验证,例如
if (validationPass) {...} else {..}
- 过于冗长,最佳做法是保持解析器精简。因为它是某种路由层。不推荐
- 使用组合库在解析器中进行验证,例如graphql-resolvers - 推荐
- 使用一些装饰器或模型模式定义在模型层 (ORM) 中进行验证。 - 无论您使用 GraphQL、gRPC、soap WSDL,这都是传统的有效方式,RESTful API。源自经典的MVC软件开发思想。推荐
- GraphQL 模式指令中的验证 - 有点复杂,不推荐
- GraphQL 中的验证middleware - 有点复杂,需要设计中间件并将验证规则映射到相应的 Query 和 Mutation,很可能需要使用
info
参数来获取 GraphQL 操作。不推荐
我只是想了解人们认为什么是在服务器上使用 graphql / orm 设置验证用户输入文件(例如 url 或电子邮件地址)的最佳实践。
我的应用程序使用 apollo server / gql 和 sequelize 作为 orm。
我见过一些人在 sequelize 中对模型进行验证,以及在 graphql 解析器中使用验证库或使用自定义标量进行验证的其他示例。
有哪一种方式更可取吗?谢谢。
输入验证是某种AOP,例如身份验证和授权。据我所知,有五种方法可以做到这一点。
- 使用通用方法在解析器中进行验证,例如
if (validationPass) {...} else {..}
- 过于冗长,最佳做法是保持解析器精简。因为它是某种路由层。不推荐 - 使用组合库在解析器中进行验证,例如graphql-resolvers - 推荐
- 使用一些装饰器或模型模式定义在模型层 (ORM) 中进行验证。 - 无论您使用 GraphQL、gRPC、soap WSDL,这都是传统的有效方式,RESTful API。源自经典的MVC软件开发思想。推荐
- GraphQL 模式指令中的验证 - 有点复杂,不推荐
- GraphQL 中的验证middleware - 有点复杂,需要设计中间件并将验证规则映射到相应的 Query 和 Mutation,很可能需要使用
info
参数来获取 GraphQL 操作。不推荐