Golang 中的 GraphQL:校验输入数据

阅读时长 7 分钟读完

GraphQL 是一种用于 API 的查询语言,它提供了一种更高效、强类型、易于理解的 API 设计方式。在 Golang 中,我们可以使用 graphql-go 库来实现 GraphQL API。

在实现 GraphQL API 时,我们需要对输入数据进行校验,以确保数据的合法性和完整性。本文将介绍如何在 Golang 中使用 graphql-go 库来校验输入数据。

校验输入数据

在 GraphQL 中,我们可以使用输入类型(Input Type)来定义输入数据的结构。输入类型和对象类型(Object Type)类似,但是输入类型只用于输入参数,不能用于返回值。定义输入类型时,我们可以使用 Go 的结构体来表示输入数据的结构。

例如,我们可以定义一个输入类型来表示一个用户的信息:

接着,我们可以定义一个 GraphQL 查询类型,该查询类型接受一个 UserInput 类型的参数:

-- -------------------- ---- -------
--- --------- - ---------------------------------------
    ----- --------
    ------- ---------------
        ------- ---------------
            ----- ---------
            ----- ----------------------------
                -------- ------------------------
                    ----- ----------------------------------
                --
            --
            -------- ----------- ---------------------- ------------- ------ -
                ---------- -- -- ---------------------------------------------
                -- --- -
                    ------ ---- ------------------- -------
                -

                -- ------
            --
        --
    --
--

在上面的示例中,我们使用 graphql.NewNonNull() 函数来指定输入参数为必填参数。如果客户端没有提供该参数,GraphQL 会返回一个错误。

在 Resolve 函数中,我们首先将输入参数转换为 UserInput 类型,然后对数据进行校验。如果数据不合法,我们可以返回一个错误,GraphQL 会将该错误返回给客户端。

总结

在 Golang 中使用 graphql-go 库实现 GraphQL API 时,我们需要对输入数据进行校验,以确保数据的合法性和完整性。通过定义输入类型和使用 graphql.NewNonNull() 函数来指定必填参数,我们可以轻松地校验输入数据。在实际开发中,我们需要根据业务需求来定义输入类型和校验规则,以提高代码的可用性和可维护性。

示例代码

完整的示例代码如下:

-- -------------------- ---- -------
------- ----

------ -
    --------

    -------------------------------
-

---- --------- ------ -
    ----     ------ -------------
    -----    ------ --------------
    -------- ------ -----------------
-

--- ------------- - -------------------------------------------------
    ----- ------------
    ------- ----------------------------------
        ------- --------------------------------
            ----- -----------------------------------
        --
        -------- --------------------------------
            ----- -----------------------------------
        --
        ----------- --------------------------------
            ----- -----------------------------------
        --
    --
--

--- -------- - ---------------------------------------
    ----- -------
    ------- ---------------
        ------- ---------------
            ----- ---------------
        --
        -------- ---------------
            ----- ---------------
        --
    --
--

--- --------- - ---------------------------------------
    ----- --------
    ------- ---------------
        ------- ---------------
            ----- ---------
            ----- ----------------------------
                -------- ------------------------
                    ----- ----------------------------------
                --
            --
            -------- ----------- ---------------------- ------------- ------ -
                ---------- -- -- ---------------------------------------------
                -- --- -
                    ------ ---- ------------------- -------
                -

                -- ------

                ------ ------
                    -----  ---------------------------
                    ------ ----------------------------
                -- ---
            --
        --
    --
--

---- ------ -
    ------- --- -- ---------------------------------------
        ------ ----------
    --
    -- --- -- --- -
        ----------
    -

    -- -- ------- --
-

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/658d6886eb4cecbf2d35d08c

纠错
反馈