npm包graphql-server-decorators使用教程

阅读时长 7 分钟读完

GraphQL简介

GraphQL是一种新的数据查询语言和API协议,由Facebook于2015年开源。GraphQL提供了一种更有效,更强大和更直观的方式来定义API端点,并使用它作为前后端之间的中间件。 GraphQL使用类型化的查询来定义客户端需要什么,并且仅返回请求的数据。这使得客户端可以根据其独特的数据需求来决定查询哪些数据,从而降低了API响应时间和传输的数据量。同时,GraphQL还具有深度嵌套查询和自我描述的特性,提高了代码的重用性和可维护性。

graphql-server-decorators

graphql-server-decorators是一个npm包,它使得在Node.js服务器上编写GraphQL服务变得更加容易。它是基于TypeScript编写的,使用装饰器来定义GraphQL的Schema和resolvers。使用这种方式,我们可以方便地定义GraphQL API,减少了代码长度,尤其是当我们需要为每个对象都编写解析器时。

下面我们将介绍如何使用graphql-server-decorators来构建GraphQL API。

安装

首先需要安装Node.js和npm。在命令行中,输入以下命令来安装graphql-server-decorators包:

npm i graphql graphql-server-decorators

定义GraphQL模式

GraphQL模式定义了API的类型和字段。使用GraphQL模式,我们可以定义数据类型、输入类型、查询类型和输入类型。在graphql-server-decorators中,我们可以使用装饰器来定义这些东西。

例如,我们可以定义一个User对象,其具有id,name和email字段:

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

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

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

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

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

在上面的代码中,我们首先导入ObjectType,Field和ID装饰器。然后,我们定义一个User类,并为其添加ObjectType装饰器。这告诉graphql-server-decorators,它是GraphQL模式中的一个对象类型。接下来,我们添加三个字段——id,name和email——通过@Field装饰器。每个装饰器都告诉graphql-server-decorators每个字段的名称和类型。

你可以使用其他装饰器来定义GraphQL其他类型的字段,例如List类型:

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

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

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

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

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

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

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

在上面的代码中,我们添加了一个Int类型的age字段,一个Post对象的List类型的posts字段。这些字段是与User类型相关联的字段。

定义GraphQL解析器

GraphQL解析器负责接收查询并返回相应的数据。我们可以使用graphql-server-decorators来定义这些解析器。

例如,我们可以定义一个User查询,该查询返回所有用户:

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

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

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

在上面的代码中,我们首先导入Query和Resolver装饰器,以及用户模型。然后我们定义一个UserResolvers类,并为其添加Resolver装饰器。这告诉graphql-server-decorators,这个类是GraphQL解析器。 接下来,我们添加一个users查询,它返回所有用户。在该方法上的Query装饰器告诉graphql-server-decorators,它是GraphQL的查询,并告诉它返回的类型是User类型的List。

启动GraphQL服务器

现在我们已经定义了GraphQL的模式和解析器,我们需要启动服务器。可以使用graphql-server-express包来启动服务器。

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

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

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

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

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

在上面的代码中,我们首先导入了express、graphqlHTTP和其他相关的模块。然后,我们通过buildSchemaSync函数创建了一个GraphQL模式,将UserResolvers和PostResolvers作为解析器数组一起传递。

接下来,我们使用graphqlHTTP包创建了一个GraphQL服务器,并将其配置到/graphql路径上。设置graphiql为true会启用GraphQL的Web IDE。最后,我们使用createServer函数创建了HTTP服务器,并将其与端口4000绑定。

使用GraphQL查询

现在我们已经启动了GraphQL服务器,可以使用curl或其他工具来查询API。例如,我们可以查询所有用户:

如果一切顺利,您应该会看到以下输出:

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

结论

我们已经介绍了如何使用graphql-server-decorators包构建GraphQL API。使用装饰器可以简化GraphQL API的编写过程,并且代码更为简洁。请尝试使用graphql-server-decorators包在自己的项目中编写GraphQL API。

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

纠错
反馈