graphql-java-extended-validation 使用教程
项目介绍
graphql-java-extended-validation
是一个用于 graphql-java
的扩展验证库。它提供了一系列的指令,可以应用于字段参数和输入类型字段,以约束它们的允许值。这些指令的名称和语义受到 javax.validation
注解的启发。通过在 GraphQL SDL(Schema Definition Language)中添加这些指令,可以实现对输入数据的验证。
项目快速启动
依赖引入
首先,在项目的 pom.xml
文件中添加以下依赖:
<dependency>
<groupId>com.graphql-java</groupId>
<artifactId>graphql-java-extended-validation</artifactId>
<version>22.0</version>
</dependency>
代码示例
以下是一个简单的示例,展示如何在 GraphQL 模式中使用 graphql-java-extended-validation
进行验证:
import graphql.schema.GraphQLSchema;
import graphql.schema.idl.SchemaParser;
import graphql.schema.idl.TypeDefinitionRegistry;
import graphql.schema.idl.SchemaGenerator;
import graphql.execution.instrumentation.Instrumentation;
import graphql.validation.rules.ValidationRules;
import graphql.validation.schemawiring.ValidationSchemaWiring;
public class Main {
public static void main(String[] args) {
// 读取 SDL 文件
Reader sdl = new FileReader("schema.graphqls");
TypeDefinitionRegistry typeDefinitionRegistry = new SchemaParser().parse(sdl);
// 创建验证规则
ValidationRules validationRules = ValidationRules.newValidationRules()
.build();
// 创建验证模式连接
ValidationSchemaWiring schemaWiring = new ValidationSchemaWiring(validationRules);
// 创建运行时连接
RuntimeWiring runtimeWiring = RuntimeWiring.newRuntimeWiring()
.directiveWiring(schemaWiring)
.build();
// 生成 GraphQL 模式
GraphQLSchema graphQLSchema = new SchemaGenerator().makeExecutableSchema(typeDefinitionRegistry, runtimeWiring);
// 创建 GraphQL 实例
GraphQL graphQL = GraphQL.newGraphQL(graphQLSchema).build();
// 执行查询
ExecutionInput executionInput = ExecutionInput.newExecutionInput()
.query("query { hello }")
.build();
ExecutionResult executionResult = graphQL.execute(executionInput);
System.out.println(executionResult.getData().toString());
}
}
应用案例和最佳实践
应用案例
假设我们有一个 GraphQL 服务,需要对用户输入的年龄进行验证,确保年龄在 18 到 100 之间。我们可以使用 @Min
和 @Max
指令来实现这一验证:
type Query {
user(age: Int @Min(value: 18) @Max(value: 100)): User
}
最佳实践
- 明确验证需求:在设计 GraphQL 模式时,明确每个字段的验证需求,并选择合适的验证指令。
- 组合使用指令:可以将多个验证指令组合使用,以实现更复杂的验证逻辑。
- 自定义错误消息:通过设置
message
参数,可以自定义验证失败时的错误消息。
典型生态项目
graphql-java-extended-validation
可以与以下生态项目结合使用:
- Spring Boot:通过集成 Spring Boot,可以更方便地管理 GraphQL 服务的生命周期和配置。
- Hibernate Validator:结合 Hibernate Validator,可以实现更丰富的验证功能。
- GraphQL Java Tools:通过 GraphQL Java Tools,可以更高效地定义和管理 GraphQL 模式。
通过这些生态项目的结合使用,可以构建出更强大、更灵活的 GraphQL 服务。