GraphQL 是一种用于 API 的查询语言,它提供了一种更加高效、强大、灵活的方式来描述数据的传输和操作。Fastify 是一个快速、低开销且可扩展的 web 框架,它的性能比 Express 更好。
在本文中,我们将介绍如何使用 Fastify 实现 GraphQL 服务端。我们将使用 Apollo Server 来处理 GraphQL 请求,它是一个流行的 GraphQL 实现。
安装和配置 Fastify
首先,我们需要安装 Fastify 和 Apollo Server。你可以使用 npm 或 yarn 进行安装:
npm install fastify apollo-server-fastify graphql
或者
yarn add fastify apollo-server-fastify graphql
然后,我们需要创建一个 Fastify 实例并将它与 Apollo Server 集成。这可以通过以下代码实现:
// javascriptcn.com 代码示例 const fastify = require('fastify')() const { ApolloServer, gql } = require('apollo-server-fastify') const typeDefs = gql` type Query { hello: String } ` const resolvers = { Query: { hello: () => 'Hello world!' } } const server = new ApolloServer({ typeDefs, resolvers }) fastify.register(server.createHandler())
在上面的代码中,我们定义了一个简单的 GraphQL 查询类型和解析器。然后,我们创建了一个 Apollo Server 实例,并将它的请求处理程序注册到 Fastify 实例中。
现在,我们可以启动 Fastify 服务器并访问 GraphQL API。这可以通过以下代码实现:
fastify.listen(3000, err => { if (err) throw err console.log(`Server listening on ${fastify.server.address().port}`) })
现在,如果你访问 http://localhost:3000/graphql
,你将看到一个 GraphiQL 界面,你可以使用它来测试你的 GraphQL API。
查询和突变
我们已经成功地创建了一个 GraphQL API,现在我们来看看如何定义更复杂的查询和突变。
查询
GraphQL 查询可以包含多个字段,每个字段都有一个返回类型和一个解析器。下面是一个包含两个字段的查询:
// javascriptcn.com 代码示例 const typeDefs = gql` type Query { hello: String books: [Book] } type Book { id: ID title: String author: String } ` const resolvers = { Query: { hello: () => 'Hello world!', books: () => [ { id: '1', title: 'Harry Potter', author: 'J.K. Rowling' }, { id: '2', title: 'The Hobbit', author: 'J.R.R. Tolkien' }, { id: '3', title: 'The Lord of the Rings', author: 'J.R.R. Tolkien' } ] } }
在上面的代码中,我们定义了一个 Book
类型和一个 books
字段,它会返回一个包含三本书的数组。我们还定义了一个 hello
字段,它返回一个字符串。
突变
突变是一种用于修改数据的 GraphQL 操作。下面是一个用于添加新书的突变:
// javascriptcn.com 代码示例 const typeDefs = gql` type Query { books: [Book] } type Mutation { addBook(title: String!, author: String!): Book } type Book { id: ID title: String author: String } ` let books = [ { id: '1', title: 'Harry Potter', author: 'J.K. Rowling' }, { id: '2', title: 'The Hobbit', author: 'J.R.R. Tolkien' }, { id: '3', title: 'The Lord of the Rings', author: 'J.R.R. Tolkien' } ] const resolvers = { Query: { books: () => books }, Mutation: { addBook: (_, { title, author }) => { const book = { id: String(books.length + 1), title, author } books.push(book) return book } } }
在上面的代码中,我们定义了一个 Mutation
类型和一个 addBook
突变,它接受 title
和 author
参数,并将新书添加到 books
数组中。
总结
在本文中,我们介绍了如何使用 Fastify 和 Apollo Server 实现 GraphQL 服务端。我们看到了如何定义查询和突变,并编写了相应的解析器。我们还学习了如何使用 GraphiQL 来测试我们的 GraphQL API。现在,你可以使用这些知识来创建自己的 GraphQL 服务端。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/6554208dd2f5e1655ddcdeea