GraphQL 是一种用于 API 的查询语言,通过定义数据的类型和结构,映射出后端业务逻辑,使得前端可以更加灵活地请求需要的数据。本文将介绍如何使用 GraphQL 映射 Server 端的业务逻辑,并提供示例代码。
什么是 GraphQL?
GraphQL 是一种由 Facebook 开发的 API 查询语言,它允许客户端指定需要的数据,而不是像 RESTful API 那样返回固定的数据结构。GraphQL 定义了一个类型系统,客户端可以根据这个类型系统来查询数据。GraphQL 的优势在于:
- 灵活:客户端可以自由地指定需要的数据,避免了 RESTful API 中需要多次请求的问题。
- 低耦合:GraphQL 通过定义类型系统来实现 API,客户端和服务端之间只需要约定好类型,就可以进行交互。
- 易于扩展:GraphQL 的类型系统允许新增字段和类型,而不需要改变 API 的版本。
如何使用 GraphQL?
使用 GraphQL 需要遵循以下步骤:
1. 定义 Schema
Schema 定义了 GraphQL 的类型系统和查询语句。在 GraphQL 中,数据都是以类型的形式存在的,可以通过定义类型来描述数据的结构。例如,下面是一个定义用户类型的 Schema:
type User { id: ID! name: String! email: String! age: Int! }
2. 定义 Resolver
Resolver 定义了查询语句的具体实现。在 GraphQL 中,每个查询语句都需要对应一个 Resolver 函数来处理请求。Resolver 函数需要返回一个与查询语句对应的类型。例如,下面是一个查询用户信息的 Resolver:
-- -------------------- ---- ------- ----- --------- - - ------ - ----- ----- --- - -- -- -- - ----- ---- - ----- --------------- ------ - --- -------- ----- ---------- ------ ----------- ---- --------- - -- -- -
3. 启动 GraphQL 服务器
启动 GraphQL 服务器需要使用一个 GraphQL 服务器库,例如 Apollo Server。在启动服务器时,需要将 Schema 和 Resolver 传入服务器。例如,下面是一个启动 GraphQL 服务器的代码:
-- -------------------- ---- ------- ----- - ------------ - - ------------------------ ----- -------- - ------------------- ----- --------- - ---------------------- ----- ------ - --- -------------- --------- --------- -- ----------------------- --- -- -- - ------------------- ----- -- -------- --
4. 发送查询请求
发送查询请求需要使用一个 GraphQL 客户端库,例如 Apollo Client。在发送请求时,需要指定查询语句和查询变量(如果有)。例如,下面是一个查询用户信息的客户端代码:
-- -------------------- ---- ------- ------ - ---- ------------- ------------- - ---- ---------------- ----- ------ - --- -------------- ---- ------------------------ ------ --- ---------------- -- ----- -------- - ---- ----- ------------ ---- - -------- ---- - -- ---- ----- --- - - - ------ -------- ------ --------- ---------- - --- --- -- -- -------------- -- - ----------------------------- --
示例代码
下面是一个使用 GraphQL 映射 Server 端的业务逻辑的示例代码。这个示例代码实现了一个简单的博客系统,包括查询文章列表、查询文章详情、创建文章和更新文章等功能。
定义 Schema
-- -------------------- ---- ------- ---- ----- - --------- ----------- ----------- ----- ------- - ---- -------- - -------------------- -------- -------- --------- ------- ----------------- ---- ------ ------- -------- -------- ------- - ---- ------- - --- --- ------ ------- -------- ------- ---------- ------- ---------- ------- -
定义 Resolver
-- -------------------- ---- ------- ----- - ------------ --------------- -------------- ------------- - - --------------- ----- --------- - - ------ - --------- ----- -- -- - ----- -------- - ----- ------------- ------ ---------------------- -- -- --- ----------- ------ -------------- -------- ---------------- ---------- -------------------------------- ---------- -------------------------------- --- -- -------- ----- --- - -- -- -- - ----- ------- - ----- ------------------ -- ---------- - ------ ---- - ------ - --- ----------- ------ -------------- -------- ---------------- ---------- -------------------------------- ---------- -------------------------------- - -- -- --------- - -------------- ----- --- - ------ ------- -- -- - ----- ------- - ----- -------------------- -------- ------ - --- ----------- ------ -------------- -------- ---------------- ---------- -------------------------------- ---------- -------------------------------- - -- -------------- ----- --- - --- ------ ------- -- -- - ----- ------- - ----- ----------------- - ------ ------- -- -- ---------- - ------ ---- - ------ - --- ----------- ------ -------------- -------- ---------------- ---------- -------------------------------- ---------- -------------------------------- - -- -- - -------------- - ---------
启动 GraphQL 服务器
-- -------------------- ---- ------- ----- - ------------ - - ------------------------ ----- -------- - ------------------- ----- --------- - ---------------------- ----- ------ - --- -------------- --------- --------- -- ----------------------- --- -- -- - ------------------- ----- -- -------- --
发送查询请求
-- -------------------- ---- ------- ------ - ---- ------------- ------------- - ---- ---------------- ----- ------ - --- -------------- ---- ------------------------ ------ --- ---------------- -- ----- ------------ - ---- ----- ----------- - -------- - -- ----- ------- --------- --------- - - - ----- ----------- - ---- ----- --------------- ---- - ----------- ---- - -- ----- ------- --------- --------- - - - ----- -------------- - ---- -------- --------------------- -------- --------- -------- - -------------------- ------- -------- --------- - -- ----- ------- --------- --------- - - - ----- -------------- - ---- -------- ------------------ ---- ------- ------- --------- ------- - ----------------- ---- ------ ------- -------- --------- - -- ----- ------- --------- --------- - - - ------ -------- ------ ------------- -- -------------- -- - --------------------------------- -- ------ -------- ------ ------------ ---------- - --- --- -- -- -------------- -- - -------------------------------- -- ------ --------- --------- --------------- ---------- - ------ ------ ------- -------- ----- -- --- ----- --------- -- -- -------------- -- - -------------------------------------- -- ------ --------- --------- --------------- ---------- - --- ---- ------ ---- ------ -- -- -------------- -- - -------------------------------------- --
结论
GraphQL 是一种灵活、低耦合、易于扩展的 API 查询语言,可以帮助前端更加灵活地请求需要的数据。使用 GraphQL 需要定义 Schema 和 Resolver,启动 GraphQL 服务器,并使用 GraphQL 客户端发送查询请求。在实际使用中,可以根据业务需要定义自己的 Schema 和 Resolver。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67652e1876af2b9a20e97f78