使用Node.js与Express建立GraphQL服务器的完整攻略
什么是GraphQL?
GraphQL是一个用于API开发的查询语言和运行时。与REST API不同,GraphQL由客户端定义查询,使得客户端不必多次请求服务器,从而节省了带宽和时间。GraphQL也具有灵活性和可扩展性,因此常被用于构建大型应用程序。
准备工作
在开始构建GraphQL服务器之前,请确保在计算机上已经安装了以下软件和工具:
- Node.js:这是运行GraphQL服务器所需的JavaScript运行时环境。
- npm:这是Node.js的包管理器,可以帮助我们轻松安装所需的软件包和依赖项。
- Express:这是一个流行的Web框架,通过它我们可以构建一个支持HTTP请求的GraphQL API。
- graphql和express-graphql:这两个是构建GraphQL服务器所必需的npm软件包。graphql是GraphQL运行时,而express-graphql是连接Express和GraphQL的库。
步骤
接下来我们将一步一步的介绍如何使用Node.js与Express建立GraphQL服务器。
1. 创建一个新的Node.js项目
我们首先需要在计算机上创建一个新的文件夹,并使用以下命令创建一个新的Node.js项目:
npm init
该命令将引导我们完成创建项目的过程,包括设置项目的名称、版本号、依赖项等细节。完成之后,我们会得到一个名为package.json
的文件,其中包含了我们刚才设置的项目的所有信息。
2. 安装必要的软件包
接下来,让我们使用以下命令安装GraphQL、Express和express-graphql:
npm install graphql express express-graphql
这将会下载所需的软件包,并将它们添加到我们的项目中。
3. 创建GraphQL Schema
GraphQL Schema定义了我们可以在服务器上提供的查询和数据类型。我们可以使用GraphQL的SDL(schema definition language)来定义Schema。
在我们的项目中,我们可以创建一个名为schema.js
的文件,并使用以下代码来定义Schema:
const { buildSchema } = require('graphql');
const schema = buildSchema(`
type Query {
hello: String
}
`);
module.exports = schema;
这个Schema定义了一个名为hello
的查询,该查询将会返回一个字符串。
4. 创建GraphQL服务器
接下来我们要使用Express和express-graphql创建GraphQL服务器。在我们的项目中,我们可以创建一个名为server.js
的文件,并使用以下代码:
const express = require('express');
const graphqlHTTP = require('express-graphql');
const schema = require('./schema');
const app = express();
app.use('/graphql', graphqlHTTP({
schema: schema,
graphiql: true,
}));
app.listen(4000, () => {
console.log('GraphQL server is running on http://localhost:4000/graphql');
});
这个服务器将会监听4000端口,并在/graphql
路径下提供GraphQL API。当客户端访问该路径时,服务器将使用我们刚才定义的Schema来解析查询,并返回结果。
5. 测试GraphQL服务器
现在我们已经创建了GraphQL服务器。我们可以使用GraphiQL工具来测试它。
请在浏览器中打开链接http://localhost:4000/graphql。你会看到一个具有文本框的界面。该文本框将会用于输入查询。在这里,你可以使用我们在Schema中定义的查询进行测试。
例如,输入以下查询:
{
hello
}
然后点击右侧的运行按钮。服务器将会返回以下结果:
{
"data": {
"hello": "world"
}
}
恭喜!现在我们已经成功地建立了一个GraphQL服务器,并对其进行了测试。
示例说明
以下是两个我们可以在示例中使用的查询:
查询所有产品
{
products {
id
name
description
price
}
}
这个查询将会返回所有产品的ID、名称、描述和价格。
查询特定的产品
{
product(id: "1") {
id
name
description
price
}
}
这个查询将会返回ID等于1的产品的名称、描述和价格。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:教你用Node.js与Express建立一个GraphQL服务器 - Python技术站