如何在 GraphQL 中暴露 Rest API

阅读时长 4 分钟读完

GraphQL 是一种用于 API 的查询语言和运行时环境,它可以让客户端指定需要的数据而不是服务器。Rest API 是一种使用 HTTP 协议传输数据的 API,具有传输数据简单,容易理解等特点。两种 API 有着各自的优势和适用场景。但在实际开发中,我们可能需要在 GraphQL 中使用已经存在的 Rest API,这就需要在 GraphQL 中暴露 Rest API。

如何开始

在正式开始操作之前,我们需要先对 GraphQL 和 Rest API 有一定的了解,了解 GraphQL 和 Rest API 的特点和使用场景。对于初学者来说,可以参考如下资料,入门 GraphQL 和 Rest API 的基本知识。

GraphQL 和 Rest API 的区别

GraphQL 和 Rest API 有着根本的区别。Rest API 像是一个过程式 API,需要先指定一个资源,然后再对其进行操作。而 GraphQL 是面向数据查询的 API,可以指定需要返回的数据格式和内容。GraphQL 可以让客户端自由地定义需要的数据,而 Rest API 则需要从服务器返回完整的数据对象。

在 GraphQL 中暴露 Rest API

在 GraphQL 中暴露 Rest API 可以通过封装 Resolver 来实现。Resolver 是 GraphQL 中最基本的概念,用于解析数据并返回客户端需要的结果。

下面是一个简单的例子,演示如何在 GraphQL 中暴露 Rest API:

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

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

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

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

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

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

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

上述代码中,我们定义了两个类型:ProductrestAPIProduct。其中,Product 表示要暴露的 Rest API 对象,restAPIProduct 表示对这个 Rest API 对象的一个 GraphQL 封装。

Product 类型中,我们使用了 @key 修饰符,这个修饰符可以为 GraphQL 类型指定一个唯一键。在这个例子中,我们将 id 指定为键。

接下来,我们通过 extend 关键字扩展 Product 类型,为其添加了 restAPI 属性。restAPI 属性的返回值是 restAPIProduct 类型。

我们还定义了一个查询类型,其中包含两个查询:getProductgetRestAPIProduct。其中,getProduct 返回 Product 类型对象,而 getRestAPIProduct 返回 restAPIProduct 类型对象。然后,我们在 Resolver 中使用了 Axios 库进行 Rest API 请求,并返回数据结果。

总结

GraphQL 能够允许我们灵活自由地定义需要的数据,而 Rest API 提供了数据传输快速简单的特点。在 GraphQL 中暴露 Rest API,可以结合两者的优势,提高开发效率,为后续开发提供更多可能性。

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

纠错
反馈