前言
GraphQL 是一种新颖的 API 设计语言,其可以帮助我们轻松地定义数据结构,并拥有强大的查询功能。@graphql-tools/wrap 是一个非常有用的 npm 包,其可以在 GraphQL API 和 HTTP REST API 之间进行转换,支持自定义的转换逻辑,开发者可以在代码层面随意定制转换过程,非常适用于现实场景中的后端服务架构升级。
本篇文章将介绍如何使用 @graphql-tools/wrap,实现 GraphQL API 和 HTTP REST API 的转换,以及如何进行自定义转换,最后会给出一个示例应用。
@graphql-tools/wrap 简介
@graphql-tools/wrap 提供了 wrapSchema
方法,可以把一个 GraphQL Schema 和一个转换方法 transform
传入,返回一个新的 GraphQL Schema 对象,根据传入的转换方法,将输入的数据格式转换为输出的数据格式。wrapSchema
可以支持转换流程分为两个阶段:
- GraphQL Query 被解析到对应 REST API 的请求,并发送到对应的 REST 服务器。
- GraphQL Proxy 从 HTTP REST API 中接收响应,并将其转换为 GraphQL API 的响应数据格式。
@graphql-tools/wrap 的使用
我们以一个 JSONPlaceholder REST API 为例,来演示如何使用 @graphql-tools/wrap。
1. 添加依赖
通过 npm 添加 @graphql-tools/wrap 包:
--- - -------------------
2. 编写转换方法
我们需要先编写转换方法。本例使用的转换方法就是将 GraphQL API 转换为 JSONPlaceholder REST API 请求。具体代码如下:
----- ----- - ---------------------- ----- - ----------- ----------- - - ------------------------------- ----- - -------- - - ---------------------------- ----- - ----------------- -------------------------- - - ------------------------- ----- --- - --------------------------------------- ----- -------- ------ - ----- -------------- - ----- -------------------- ---------- --- ---- ----- ------------------------ - ---------------------------- ------- --------------- ----- --- ---------- --- -- --- ----- ------- - ----- -- ------ -------------- ---------- ------- -- -- - ----- ----- - -------------------------------------- ---- -- -------------------------- ----- ------ - ----- --------------------- - ------- ------- -------- - --------------- ------------------ -- ----- ---------------- ------ ---------------------- --------- -- --- ------ -------------- -- ----- --------------------- - ------------ ------- -------------------------------- -------- --- -
3. 使用转换方法
将生成的新的 GraphQL Schema 对象用于创建 GraphQL API。具体代码如下:
----- - ------------ - - ------------------------- ----- -------- ------ - ----- --------------------- - --- -- ----- ----- ------ - --- -------------- ------- --------------------- --- ----------------------- --- -- -- - --------------- ------ ----- -- --------- --- -
至此,我们就实现了 GraphQL API 和 JSONPlaceholder REST API 的转换。例如我们有一个查询请求:
----- ------- - -------- -- - -- ---- - -
将其转换为 JSONPlaceholder 的请求:
- -------- ------ --------------------------- ---- ------------------------ ---- - -- ---- ---- ------------ - ----- - - -
得到的响应是:
- ------- - ---------------------- - ----- -- ------- ------- ------- - - -
自定义转换方法
使用 @graphql-tools/wrap 具有更加灵活的自定义功能。我们可以编写自己的转换方法以满足项目的需求。以下是一个自定义的转换方法用于将转化后的 REST API 响应转换为 GraphQL 数据格式:
----- - ---------- - - ------------------------------- ----- - -------------------- - - ------------------------- ----- -------- - - ---- ------ - --- ---- ----- ------- ---- ------ - ---- ---- - --- ---- ------ ------- ------- ------- - ---- ----- - ------ ------ -------- ------ ---- -------- -------- ---------- ----- -------- - -- ----- ----- - - - --- -- ----- ----- ---- ------- -- - --- -- ----- ----- ---- -------- -- -- ----- ----- - - - --- -- ------ ---- ---------- -- --- -------- --------- - -- - --- -- ------ ---- ---------- -- ----------- ------ --------- - -- - --- -- ------ ------ --- ----------- --------- - -- -- ----- --------- - - ------ - ------ -- -- ------ -------- -- -- ------ ----- -------- ----- -- --------------- -- ------- --- --------- ------- -------- ----- -- ----------------- -- ------- --- -------- -- ----- - ------- -------- -- - ------ --------------- -- ------- --- ----------------- -- -- -- ----- ------------ - ---------------------- --------- ---------- --- ----- ------- - ----- -- ------ -------------- --------- -- -- - ----- -------- - ----- ---------------------------------------------------- ----- ------------ - ----- ---------------- ----- ----------------- - ----- ----- --- ---- ------ ------- ----- ----- - ---- ----- --- ---- ----- ------- --- ----- ---------- - ----- ------------------------------ ----- ------------------- - ----------------------- -- - ------ - ----------- ------- --- ---------- ------ ------------- ----- - --- -------------- ----- ------------ - -- --- ------ - ----- ------------------- -- -- ----- ------------------- - ------------ ------- ------------- -------- --- -- ----- ----- ------ - --- -------------- ------- -------------------- --- --------------- ----- ---- ---------- --- -- -- - --------------- ------ ----- -- --------- ---
示例应用
最后,我们给出一个示例应用。应用将 @graphql-tools/wrap 和 JSONPlaceholder REST API 集成,编写一个图书管理系统。具体实现请看下面的代码:
----- ----- - ---------------------- ----- - ----------- ----------- - - ------------------------------- ----- - -------- - - ---------------------------- ----- - ----------------- -------------------------- - - ------------------------- ----- - ------------- --- - - ------------------------- ----- -------- ------ - ----- -------------- - ----- -------------------- ---------- ---- -------------------------------------- ---- ----- ------------------------ - ---------------------------- ------- --------------- ----- --- ---------- ---- -------------------------------------- -- --- ----- ------- - ----- -- ------ -------------- ---------- ------- -- -- - ----- ----- - -------------------------------------- ---- -- -------------------------- ----- ------ - ----- --------------------------------------------------- - ------- ------- -------- - --------------- ------------------ -- ----- ---------------- ------ ---------------------- --------- -- --- ------ -------------- -- ----- --------------------- - ------------ ------- -------------------------------- -------- --- ----- -------- - ---- ---- ----- - ------ ------ - ---- ---- - --- --- ------ ------ ------- ------ - -- ----- --------- - - ------ - ------ ----- -------- ----- -------- ----- -- - ----- ----- - ---- ----- - -------------------- - -- ----- ------ ---- - ---- - - - -- ----- -------- - ----- --------------------------------- ------- ---------------------- ---------- -------- ---------- ----------------------- ----- ------ --- ------ --------------- --- ------ ---- -- -- -- --- ------ ------- ---------- -- --------- ---- -- -- -- ----- ------ - --- -------------- --------- ---------- --- ----------------------- --- -- -- - --------------- ------ ----- -- --------- --- - -------
上面的应用展示了如何将 JSONPlaceholder API 查询转换为 GraphQL 查询字段,并在 GraphQL Resolver 中进行处理,最终通过 API 中的 books
返回给客户端。
结论
到此,我们已经学习了 @graphql-tools/wrap 这个包的使用。我们可以看到,用这个包来处理 GraphQL 和 HTTP REST API 的转换是相当方便和高效的。如果你在你的项目中需要进行 GraphQL 和 HTTP REST API 的转换,那么你应该考虑使用 @graphql-tools/wrap。
来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/5eedc8a5b5cbfe1ea0612319