在 GraphQL 架构设计过程中如何选择合适的 Schema 结构及类型

阅读时长 7 分钟读完

前言

GraphQL 是一种用于 API 构建的查询语言,它提供了一种更加灵活和高效的方式来获取数据。在使用 GraphQL 构建 API 的过程中,Schema 是一个非常重要的概念,它定义了可用的查询、数据类型和关联关系等元素。在本文中,我们将讨论如何选择合适的 Schema 结构及类型,以便构建更好的 GraphQL API。

Schema 结构的选择

在选择 Schema 结构时,我们需要考虑以下几个因素:

数据模型

GraphQL 的 Schema 应该反映数据模型,这意味着我们需要考虑数据模型中的实体、关系和属性等元素。例如,如果我们正在构建一个电子商务平台的 API,我们可能会有以下数据模型:

  • User(用户)
  • Product(商品)
  • Order(订单)
  • Review(评论)

在这种情况下,我们可以使用以下 Schema 结构:

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

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

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

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

查询需求

GraphQL 的查询是基于 Schema 进行的,因此我们需要考虑哪些查询是我们需要支持的。例如,对于电子商务平台 API,我们可能需要支持以下查询:

  • 获取商品列表
  • 获取单个商品的详细信息
  • 获取某个用户的订单列表
  • 获取某个订单的详细信息
  • 获取某个商品的评论列表

在这种情况下,我们可以使用以下 Schema 结构:

性能考虑

Schema 结构的选择还应该考虑性能问题。GraphQL 查询中的每个字段都需要进行数据库查询或其他数据源的访问,因此我们需要尽可能减少查询的数量和复杂度。例如,如果我们需要获取某个用户的订单列表,我们可以使用以下 Schema 结构:

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

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

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

在这种情况下,我们只需要进行一次查询,就可以获取用户和订单的所有信息。

类型的选择

在选择类型时,我们需要考虑以下几个因素:

数据类型

GraphQL 支持多种数据类型,包括标量类型(例如 String、Int、Float、Boolean、ID)和自定义类型。我们需要根据数据模型选择合适的类型。例如,在电子商务平台 API 中,我们可以使用以下类型:

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

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

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

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

可选性

GraphQL 支持可选字段和非可选字段。可选字段表示该字段可能为空,而非可选字段表示该字段不能为空。我们需要根据数据模型选择合适的可选性。例如,在电子商务平台 API 中,我们可以使用以下类型:

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

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

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

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

在这种情况下,评论的评论字段是可选的,因为不是所有评论都需要评论。

列表类型

GraphQL 支持列表类型,表示该字段返回的是一个列表。我们需要根据数据模型选择合适的列表类型。例如,在电子商务平台 API 中,我们可以使用以下类型:

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

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

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

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

在这种情况下,用户的订单和商品的评论都是列表类型。

示例代码

以下是一个简单的电子商务平台 API 的示例代码:

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

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

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

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

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

在这个示例中,我们定义了 User、Product、Order、Review 和 Query 类型,以及它们之间的关系。我们可以使用这个 Schema 来构建一个电子商务平台的 API,提供商品列表、商品详情、用户订单列表、订单详情和商品评论列表等查询。

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

纠错
反馈