如何在 Golang 中使用 GraphQL

前言

GraphQL 是一种用于构建 Web API 的查询语言和运行时。它可以让前端开发人员更加灵活地获取后端数据,而不需要和传统的 REST API 一样去请求一些冗余和不需要的数据。在 Golang 中,我们可以使用现成的库来快速实现 GraphQL API,而本文将会介绍如何在 Golang 中使用 GraphQL。

设计 GraphQL Schema

在开始之前,我们需要先确定好我们的 GraphQL Schema。Schema 定义了客户端可以如何查询数据,以及数据查询的结构和类型。在 Golang 中,我们可以使用 github.com/graphql-go/graphql 这个第三方库来定义我们的 Schema。

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

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

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

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

以上代码将会定义一个名为 Book 的类型,它包含有 idtitleauthor 三个属性。RootQuery 定义了我们的查询接口,我们可以通过 book 这个字段来查询一本书的详细信息。在 Resolve 函数中,我们可以根据客户端传递的查询参数,来查询数据库中的数据并返回。

启动 GraphQL 服务

定义好了 Schema,我们还需要编写后端 API 来处理客户端的查询请求。在 Golang 中,我们可以使用 github.com/graphql-go/handler 这个库来启动 GraphQL 服务。

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

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

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

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

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

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

以上代码会在 http://localhost:8080/api/graphql 上启动一个 GraphQL API 服务,客户端可以通过该 URL 来访问我们的 API 并查询数据。

发送 GraphQL 查询请求

最后,我们需要编写前端代码来发送 GraphQL 查询请求,获取服务端返回的数据。在前端中,我们可以使用 axios 这个库来发送查询请求。

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

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

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

以上代码定义了一个 query 字符串,其中使用了变量 $id,用于让客户端通过传递参数来查询指定的数据。在 axios.post 方法中,我们将 queryvariables 这两个参数传递给 API 服务端,并通过 res.data.data.book 来获取服务端返回的数据。不仅如此,GraphQL 还允许我们在查询中只获取我们关心的字段,而不必去请求整张表中的所有数据,这可以让前端页面加载更快,查询效率也更高。

总结

本文介绍了如何在 Golang 中使用 GraphQL,包括定义 Schema 和启动 GraphQL 服务等内容。通过使用 GraphQL,前端开发人员可以更加灵活地获取后端数据,并获取更好的用户体验。如果你现在正在寻找一种新的 API 设计方式,那么 GraphQL 或许可以成为你的一个不错的选择。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/664ff1a0d3423812e41bdcad