GraphQL 是一种新兴的 API 架构风格,它提供了一种更加灵活和高效的方法来构建和查询 API。在 GraphQL 中,客户端可以精确地指定它需要的数据,而不是像传统的 RESTful API 一样将所有数据返回给客户端。在构建一个 GraphQL API 时,有两种主要的架构风格:Schema First 和 Resolvers First。本文将探讨这些架构风格的区别以及在何时选择何种风格。
Schema First
在 Schema First 架构风格中,我们首先定义一个 GraphQL schema,它描述了我们需要在 API 中暴露的数据。该 schema 定义了我们 API 中所有可能的查询、mutation 和 subscription,以及这些查询返回的数据类型。它还定义了可选参数、默认值等等。定义 schema 后,我们可以根据 schema 自动生成我们的 resolver。
以下是一个简单的例子,演示了如何使用 Schema First 架构风格定义一个查询。
-- -------------------- ---- ------- ---- ----- - -------- ----- ---- - ---- ---- - --- --- ----- ------- ------ ------- -
在这个例子中,我们定义了一个查询,该查询接受一个 ID 参数,返回一个 User 对象。User 对象有 id、name 和 email 字段,每个字段都有一个类型(ID、String)。我们可以自动生成相应的 resolver,使得我们可以根据 ID 来查找用户。
Resolvers First
在 Resolvers First 架构风格中,我们首先定义 resolver,并在 resolver 中定义我们要暴露的数据。在这种情况下,我们没有一个明确的 schema,我们需要将我们自己的解析器函数链接到对应的查询。这意味着我们需要自己编写我们的 schema。
以下是一个简单的例子,演示了如何使用 Resolvers First 架构风格定义一个查询。
-- -------------------- ---- ------- ----- --------- - - ------ - ------- - -- -- - ------ ----------------- - -- ----- - ---------- - ------ ---------- -- ----------- - ------ ----------- - - --
在这个例子中,我们定义了一个查询解析器函数 user。我们在查询中传递一个参数 id,然后返回一个 User 对象。我们也定义了 User 对象的解析器函数,它们返回 User 对象的属性。
何时使用 Schema First
使用 Schema First 架构风格的主要优势在于:我们可以从 schema 定义中更好地理解我们的 API,而不必查看完整的 resolver 代码。我们可以更快地了解我们的数据模型和响应方式,并在需要时更轻松地对其进行更新。在 Schema First 架构风格中,我们可以更好地了解我们的 API,以及支持它的类型,因为我们的所有代码都是基于 schema 定义的。
我们还可以使用一些工具,如 Apollo Codegen,自动生成我们的 resolver。这些工具可以从 schema 来自动生成代码,从而简化我们的开发工作。这些工具还可用于其他类型的验证和自动化任务。
因此,当我们需要更好地了解我们的 API,并支持它的所有类型和功能时,可以选择 Schema First 架构风格。
何时使用 Resolvers First
使用 Resolvers First 架构风格的主要优势在于:我们可以使用 JavaScript 函数来控制数据的提取和处理。我们可以使用任何编程语言和工具,因此比 Schema First 架构风格更加灵活方便。使用 Resolvers First 架构风格,我们可以完全自己控制我们 API 的逻辑。
另一个优势在于我们可以更好地组织逻辑代码。我们可以将相关的 resolver 逻辑放在一起,而不是统一在 schema 中定义。这使得我们可以更方便和高效地修改代码和添加新的功能。
因此,在我们需要更多的灵活性和自定义代码逻辑时,可以选择 Resolvers First 架构风格。
总结
在开发 GraphQL API 时,有两种主要的架构风格:Schema First 和 Resolvers First。在选择架构风格时,我们需要考虑我们的目标以及我们需要的灵活性和可控性。使用 Schema First 架构风格可以更好地了解我们的数据模型和响应方式,并支持它的所有类型和功能,但是牺牲了一些灵活性和自定义逻辑的能力。使用 Resolvers First 架构风格可以更加灵活方便,并且我们可以自己控制 API 中数据的提取和处理,但是需要我们自行维护代码的组织和逻辑。
因此,我们需要根据具体情况选择适合我们开发的风格,并根据我们的目标和需求进行具体实现。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64dd1974f6b2d6eab382cb9d