GraphQL 是一种用于 API 的查询语言和运行时环境,它可以让客户端指定需要的数据而不是服务器。Rest API 是一种使用 HTTP 协议传输数据的 API,具有传输数据简单,容易理解等特点。两种 API 有着各自的优势和适用场景。但在实际开发中,我们可能需要在 GraphQL 中使用已经存在的 Rest API,这就需要在 GraphQL 中暴露 Rest API。
如何开始
在正式开始操作之前,我们需要先对 GraphQL 和 Rest API 有一定的了解,了解 GraphQL 和 Rest API 的特点和使用场景。对于初学者来说,可以参考如下资料,入门 GraphQL 和 Rest API 的基本知识。
- GraphQL 入门:https://graphql.cn/learn/
- RESTful API 设计指南:https://www.ruanyifeng.com/blog/2014/05/restful_api.html
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:
-- -------------------- ---- ------- ---- ----- - -------------- --------- ------- - ---- ------- - --- ------- ----- ------- - ---- -------------- - --- ------- ----- ------- - ------ ---- ------- ------------ ----- - --- ------- --------- -------- -------------- - ------ ---- ----- - --------------------- --------- -------------- - ---- ----- - -------------- --------- ------- --------------------- --------- -------------- - --------- - ------ - ------------------ ----- --- - -- -- -- ---------------------------------------------------------- -- --------- - -
上述代码中,我们定义了两个类型:Product
和 restAPIProduct
。其中,Product
表示要暴露的 Rest API 对象,restAPIProduct
表示对这个 Rest API 对象的一个 GraphQL 封装。
在Product
类型中,我们使用了 @key
修饰符,这个修饰符可以为 GraphQL 类型指定一个唯一键。在这个例子中,我们将 id
指定为键。
接下来,我们通过 extend
关键字扩展 Product
类型,为其添加了 restAPI
属性。restAPI
属性的返回值是 restAPIProduct
类型。
我们还定义了一个查询类型,其中包含两个查询:getProduct
和 getRestAPIProduct
。其中,getProduct
返回 Product
类型对象,而 getRestAPIProduct
返回 restAPIProduct
类型对象。然后,我们在 Resolver 中使用了 Axios 库进行 Rest API 请求,并返回数据结果。
总结
GraphQL 能够允许我们灵活自由地定义需要的数据,而 Rest API 提供了数据传输快速简单的特点。在 GraphQL 中暴露 Rest API,可以结合两者的优势,提高开发效率,为后续开发提供更多可能性。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/646d7eb3968c7c53b0c2aa0e