GraphQL 是一种用于 API 的查询语言。它不同于传统的 RESTful API,它允许客户端自由的定义查询和数据的返回格式。在本篇文章中,我们将深入探讨如何使用 GraphQL 构建一个按条件过滤查询的 API。
什么是 GraphQL
GraphQL 是由 Facebook 开发的一种查询语言。它可以用于客户端和服务器之间的通信,用于取代传统的 RESTful API。 与传统的 RESTful API 不同,GraphQL 通过被称为 Schema 的对象定义,允许客户端自由的定义查询和返回的数据格式。这种灵活性使得 GraphQL 特别适合大型或复杂的应用程序,使得开发者能够更容易地获取所需数据。
以下是一个简单的 GraphQL 查询示例:
query { user(id: "123") { name email } }
这个查询将从服务器上请求一个 user
对象并返回其 name
和 email
属性。这个查询还可以使用更复杂的过滤器,以根据特定条件筛选所需的数据。
需求分析
在构建按条件过滤查询的 API 时,我们应当先明确自己的需求,以便于在下一步中对 GraphQL 进行 Schema 的定义和实现。
假设我们正在构建一个电商平台,通过 GraphQL API 提供一组 Product
数据。这组数据应该包括:id
,name
,description
,price
,category
等属性。为了使客户端能够更好地处理这些数据,我们需要根据一些条件进行过滤。这些条件可以是:名称、描述、价格区间、品类等。
因此,我们需要实现一个可以接受以上条件的 GraphQL 查询,返回满足条件的 Product 数据。
构建 Schema
在 GraphQL 中,Schema 是指数据对象的类型定义,以及可用于查询和修改这些数据对象的操作类型。为了构建我们的 Schema,我们需要定义 Product 类型,以及查询类型与返回值。
以下是我们的 Product
类型定义:
type Product { id: ID! name: String! description: String! price: Float! category: String! }
在本示例中,我们定义了一个包含 id
、name
、description
、price
和 category
等属性的 Product 类型。其中,id
为必需属性,并定义为类型为 ID
;其他属性为 String
或 Float
类型。
接下来,我们定义查询类型并返回值:
type Query { products(name: String, description: String, price_min: Float, price_max: Float, category: String): [Product]! }
我们定义名称为 Query
的查询类型,并添加一个 products
查询。它将接受一组包含 name
、description
、price_min
、price_max
和 category
等属性的输入参数,并返回 Product
类型的数组。
现在我们已经定义了我们的 Schema,接下来让我们看看如何实现它。
实现
在实现我们的 GraphQL 查询之前,我们需要定义我们的数据源。在本示例中,我们将使用一个包含 Product
对象的数组作为我们的数据源。
-- -------------------- ---- ------- ----- -------- - - - --- ------ ----- ------- ---- ------------ ------ ------ -- ---------- ---- -- --- ----- --------- -------- ------ ------- --------- ------------- -- - --- ------ ----- -------- ----- ------------ ------ ------- --- --------- --- ---- ----- --- -------- - ----- ------ ------ -------- --------- ------------- -- - --- ------ ----- ------ ------------ ---- -------- ---- ------------- ------ ------ ---- ------------- ------ ------- --------- ------------- -- - --- ------ ----- ------ --- ---- --------- ------------ ---- ------- ------------- --- ---------- ---------- -- ------ --------- ---------- ------------ ------ ----- --------- ------- - --
接下来,我们实现 Query
的 products
查询:
-- -------------------- ---- ------- ----- --------- - - ------ - --------- --- - ----- ------------ ---------- ---------- -------- -- -- - ------ ----------------------- -- - ----- ----- - -------------- ------ ----- - --------------------------- - ----- -- ------------ - ----------------------------------------- - ----- -- --------- - ---------------- --- -------- - ----- -- ---------- - ----- -- --------- - ----- -- ---------- - ----- -- --------- - ------ --- - - --
在这个查询中,我们使用了数组的 filter
方法来过滤满足条件的数据。这里我们使用了一些简单的条件语句来包含或排除数据,以便返回所需的数据。当然,开发者可以根据自己的需求添加更多的条件。
最后,我们只需将 Schema
和 Resolvers
绑定起来并启动服务器,便能够在客户端对象上查询数据了。
结论
在本篇文章中,我们介绍了 GraphQL 的定义和 Schema,以及如何使用 GraphQL 构建一个按条件过滤查询的 API。我们介绍了如何定义数据类型和查询类型,并提供了一个简单的实现。这个实现可以为开发者提供参考,使开发者能够更好地理解 GraphQL API 的运作方式,并在实践中更好地应用它。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6732d8050bc820c5823f24c5