GraphQL 是一种用于 API 的查询语言,它可以让客户端精确地指定其需要的数据。它可以帮助你更好地组织你的 API,并提供更好的性能和可维护性。
在本文中,我们将学习如何将 GraphQL 集成到你的 Node.js 应用程序中。我们将从安装和配置开始,然后深入探讨如何定义和使用 GraphQL 模式,以及如何编写解析器和数据源。
安装和配置
首先,我们需要安装必要的依赖项。我们将使用以下命令安装它们:
npm install graphql express express-graphql
接下来,我们需要配置我们的应用程序。我们将使用 Express 框架来创建我们的应用程序,并使用 express-graphql 中间件来处理 GraphQL 请求。我们的应用程序将监听端口 4000。
-- -------------------- ---- ------- ----- ------- - ------------------- ----- - ----------- - - --------------------------- ----- - ----------- - - ------------------- ----- ------ - ------------- ---- ----- - ------ ------ - --- ----- ---- - - ------ -- -- ------ -------- -- ----- --- - ---------- ------------------- ------------- ------- ------- ---------- ----- --------- ----- ---- ---------------- -- -- - -------------------- - ------- --- ------ -- -------------------------------- ---
在上面的代码中,我们定义了一个 GraphQL 模式,其中包含一个查询类型 Query 和一个名称为 hello 的字段。我们还定义了一个名为 root 的对象,其中包含一个名为 hello 的函数,该函数返回字符串“Hello world!”。
我们将使用 graphqlHTTP 中间件来处理 GraphQL 请求。我们将传递我们的模式和根对象作为选项,并将 graphiql 选项设置为 true,以便启用 GraphiQL IDE。
现在,我们可以运行我们的应用程序,并在浏览器中访问 http://localhost:4000/graphql,以查看我们的 GraphQL API。
定义和使用 GraphQL 模式
现在我们已经设置了我们的应用程序,我们可以开始定义我们的 GraphQL 模式。我们将使用 SDL(Schema Definition Language)来定义我们的模式。
-- -------------------- ---- ------- ----- ------ - ------------- ---- ----- - -------- ----- ---- ------ ------ - ---- ---- - --- --- ----- ------- ------ ------- ------ ------ - ---- ---- - --- --- ------ ------- ----- ------- ------- ----- - ---
在上面的代码中,我们定义了三种类型:Query、User 和 Post。我们的查询类型 Query 包含两个字段:user 和 users。user 接受一个 ID 参数,并返回一个 User 类型的对象。users 返回一个 User 类型的数组。
User 类型包含四个字段:id、name、email 和 posts。id 和 name 是必需的字段,email 是可选的。posts 是一个 Post 类型的数组。
Post 类型包含四个字段:id、title、body 和 author。id、title 和 body 是必需的字段,author 是一个 User 类型的对象。
现在我们已经定义了我们的模式,我们可以使用它来查询我们的数据。我们将使用我们之前定义的 root 对象来处理我们的查询。
-- -------------------- ---- ------- ----- ---- - - ----- -- -- -- -- - ------ ---------------- -- ------ -- -- - ------ -------------- -- -- -------- --------------- - -- -- -- -- -- ----- - -------- ------------- - -- ----------- -
在上面的代码中,我们定义了两个函数:getUserById 和 getAllUsers。这些函数将根据查询中传递的参数返回相应的数据。我们将使用这些函数来处理我们的查询。
现在我们可以在 GraphiQL 中运行我们的查询。我们将使用以下查询来获取所有用户的名称和电子邮件地址:
{ users { name email } }
我们将使用以下查询来获取 ID 为 1 的用户的名称和电子邮件地址:
{ user(id: 1) { name email } }
编写解析器和数据源
现在我们已经定义了我们的模式和根对象,我们可以开始编写我们的解析器和数据源。我们的解析器将负责将查询转换为数据源可以理解的格式,并将结果返回给客户端。
我们将编写一个名为 UserResolver 的解析器。我们将使用这个解析器来处理所有与用户相关的查询。
-- -------------------- ---- ------- ----- ------------ - ----------------------- - --------------- - ----------- - ----- --------------- - ------ -------------------------------- - ----- ------------- - ------ ------------------------------ - -
在上面的代码中,我们定义了一个名为 UserResolver 的类。这个类包含两个方法:getUserById 和 getAllUsers。这些方法将从数据源中获取数据,并将其返回给客户端。
我们还需要编写一个数据源,该数据源将从数据库或其他数据存储中获取数据。我们将编写一个名为 UserDataSource 的数据源。
-- -------------------- ---- ------- ----- -------------- - ----- --------------- - -- ------- -- -- -- ----- - ----- ------------- - -- ---------------- - -
在上面的代码中,我们定义了一个名为 UserDataSource 的类。这个类包含两个方法:getUserById 和 getAllUsers。这些方法将从数据库或其他数据存储中获取数据,并将其返回给解析器。
现在我们已经定义了我们的解析器和数据源,我们可以将它们与我们的模式和根对象一起使用。
-- -------------------- ---- ------- ----- ------------ - --- ---------------- ------------------ ----- ---- - - ----- -- -- -- -- - ------ ----------------------------- -- ------ -- -- - ------ --------------------------- -- --
在上面的代码中,我们创建了一个名为 userResolver 的 UserResolver 对象,并将其传递给我们的根对象。我们的根对象将使用这个解析器来处理我们的查询。
现在我们可以在 GraphiQL 中运行我们的查询。我们将使用以下查询来获取所有用户的名称和电子邮件地址:
{ users { name email } }
我们将使用以下查询来获取 ID 为 1 的用户的名称和电子邮件地址:
{ user(id: 1) { name email } }
结论
在本文中,我们学习了如何将 GraphQL 集成到我们的 Node.js 应用程序中。我们学习了如何定义和使用 GraphQL 模式,以及如何编写解析器和数据源。我们还学习了如何使用 Express 框架和 express-graphql 中间件来处理 GraphQL 请求。
GraphQL 是一个非常强大的工具,可以帮助我们更好地组织我们的 API,并提供更好的性能和可维护性。我希望这篇文章能够帮助你开始使用 GraphQL,并在你的应用程序中获得更好的结果。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/675bcc41a4d13391d8f86028