GraphQL 是一种用于 API 的查询语言,它提供了一种更高效、强类型、易于理解的 API 设计方式。在 Golang 中,我们可以使用 graphql-go 库来实现 GraphQL API。
在实现 GraphQL API 时,我们需要对输入数据进行校验,以确保数据的合法性和完整性。本文将介绍如何在 Golang 中使用 graphql-go 库来校验输入数据。
校验输入数据
在 GraphQL 中,我们可以使用输入类型(Input Type)来定义输入数据的结构。输入类型和对象类型(Object Type)类似,但是输入类型只用于输入参数,不能用于返回值。定义输入类型时,我们可以使用 Go 的结构体来表示输入数据的结构。
例如,我们可以定义一个输入类型来表示一个用户的信息:
type UserInput struct { Name string `json:"name"` Email string `json:"email"` Password string `json:"password"` }
接着,我们可以定义一个 GraphQL 查询类型,该查询类型接受一个 UserInput 类型的参数:
-- -------------------- ---- ------- --- --------- - --------------------------------------- ----- -------- ------- --------------- ------- --------------- ----- --------- ----- ---------------------------- -------- ------------------------ ----- ---------------------------------- -- -- -------- ----------- ---------------------- ------------- ------ - ---------- -- -- --------------------------------------------- -- --- - ------ ---- ------------------- ------- - -- ------ -- -- -- --
在上面的示例中,我们使用 graphql.NewNonNull() 函数来指定输入参数为必填参数。如果客户端没有提供该参数,GraphQL 会返回一个错误。
在 Resolve 函数中,我们首先将输入参数转换为 UserInput 类型,然后对数据进行校验。如果数据不合法,我们可以返回一个错误,GraphQL 会将该错误返回给客户端。
总结
在 Golang 中使用 graphql-go 库实现 GraphQL API 时,我们需要对输入数据进行校验,以确保数据的合法性和完整性。通过定义输入类型和使用 graphql.NewNonNull() 函数来指定必填参数,我们可以轻松地校验输入数据。在实际开发中,我们需要根据业务需求来定义输入类型和校验规则,以提高代码的可用性和可维护性。
示例代码
完整的示例代码如下:
-- -------------------- ---- ------- ------- ---- ------ - -------- ------------------------------- - ---- --------- ------ - ---- ------ ------------- ----- ------ -------------- -------- ------ ----------------- - --- ------------- - ------------------------------------------------- ----- ------------ ------- ---------------------------------- ------- -------------------------------- ----- ----------------------------------- -- -------- -------------------------------- ----- ----------------------------------- -- ----------- -------------------------------- ----- ----------------------------------- -- -- -- --- -------- - --------------------------------------- ----- ------- ------- --------------- ------- --------------- ----- --------------- -- -------- --------------- ----- --------------- -- -- -- --- --------- - --------------------------------------- ----- -------- ------- --------------- ------- --------------- ----- --------- ----- ---------------------------- -------- ------------------------ ----- ---------------------------------- -- -- -------- ----------- ---------------------- ------------- ------ - ---------- -- -- --------------------------------------------- -- --- - ------ ---- ------------------- ------- - -- ------ ------ ------ ----- --------------------------- ------ ---------------------------- -- --- -- -- -- -- ---- ------ - ------- --- -- --------------------------------------- ------ ---------- -- -- --- -- --- - ---------- - -- -- ------- -- -
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/658d6886eb4cecbf2d35d08c