GraphQL 是一种用于构建 API 的查询语言和运行时环境。它由 Facebook 开发并于 2015 年开源。相比于传统的 RESTful API,GraphQL 更加灵活,可以根据客户端的需求来获取数据。在前端开发中,GraphQL 已经成为一种非常流行的技术,但它同样适用于后端 API 的构建。本文将介绍如何使用 GraphQL 构建一个后端 API。
什么是 GraphQL?
GraphQL 是一种查询语言,用于 API 的设计和开发。它定义了一种类型系统,客户端可以根据自己的需求指定查询参数,后端会返回符合条件的数据。GraphQL 的查询语言非常灵活,客户端可以根据需要指定需要查询的字段和数据类型。相比于传统的 RESTful API,GraphQL 可以减少请求次数和传输数据的大小,提高应用的性能和效率。
如何使用 GraphQL 构建后端 API?
使用 GraphQL 构建后端 API 的过程可以分为以下几个步骤:
1. 定义数据模型
首先需要定义数据模型,包括数据类型和关系。GraphQL 使用类型系统来定义数据模型,可以使用 SDL(Schema Definition Language)或者编程语言来定义。
以一个简单的博客系统为例,假设有两个数据类型:文章和作者。
// javascriptcn.com 代码示例 type Author { id: ID! name: String! email: String! posts: [Post!]! } type Post { id: ID! title: String! content: String! author: Author! }
在这个数据模型中,每个作者可以有多篇文章,每篇文章只属于一个作者。
2. 定义查询和变更
定义好数据模型后,需要定义查询和变更来获取和修改数据。查询和变更都是由客户端发起的,后端需要根据客户端的请求来返回数据或者修改数据。
定义查询和变更可以使用 SDL 或者编程语言来定义。
// javascriptcn.com 代码示例 type Query { post(id: ID!): Post author(id: ID!): Author } type Mutation { createPost(title: String!, content: String!, authorId: ID!): Post updatePost(id: ID!, title: String, content: String): Post deletePost(id: ID!): Boolean }
在这个例子中,定义了两个查询:获取文章和获取作者。定义了三个变更:创建文章、更新文章和删除文章。
3. 实现查询和变更
定义好查询和变更后,需要实现这些查询和变更。可以使用任何编程语言来实现 GraphQL 的查询和变更,只需要实现相应的解析器即可。
以 JavaScript 为例,可以使用 GraphQL.js 来实现查询和变更。
// javascriptcn.com 代码示例 const { graphql, buildSchema } = require('graphql'); const schema = buildSchema(` type Author { id: ID! name: String! email: String! posts: [Post!]! } type Post { id: ID! title: String! content: String! author: Author! } type Query { post(id: ID!): Post author(id: ID!): Author } type Mutation { createPost(title: String!, content: String!, authorId: ID!): Post updatePost(id: ID!, title: String, content: String): Post deletePost(id: ID!): Boolean } `); const authors = [ { id: '1', name: 'Alice', email: 'alice@example.com' }, { id: '2', name: 'Bob', email: 'bob@example.com' }, ]; const posts = [ { id: '1', title: 'Hello World', content: 'This is my first post', authorId: '1' }, { id: '2', title: 'GraphQL', content: 'Learn GraphQL in 10 minutes', authorId: '2' }, ]; const root = { post: ({ id }) => posts.find(post => post.id === id), author: ({ id }) => authors.find(author => author.id === id), createPost: ({ title, content, authorId }) => { const id = String(posts.length + 1); const post = { id, title, content, authorId }; posts.push(post); return post; }, updatePost: ({ id, title, content }) => { const post = posts.find(post => post.id === id); if (title) post.title = title; if (content) post.content = content; return post; }, deletePost: ({ id }) => { const index = posts.findIndex(post => post.id === id); if (index === -1) return false; posts.splice(index, 1); return true; }, }; const query = ` query { post(id: "1") { title content author { name email } } } `; graphql(schema, query, root).then(result => { console.log(result); });
在这个例子中,实现了查询和变更的解析器。查询和变更的解析器都是一个函数,根据传入的参数返回相应的数据。可以使用任何数据库来存储数据,这里使用了一个简单的数组来模拟。
4. 使用 GraphQL Playground 测试 API
使用 GraphQL Playground 来测试 API,可以非常方便地查看查询和变更的结果。GraphQL Playground 是一个交互式的 GraphQL IDE,可以用来测试和调试 GraphQL API。
安装 GraphQL Playground 可以使用 npm 安装:
npm install --save graphql-playground-middleware-express
使用 GraphQL Playground 可以直接在浏览器中访问:
// javascriptcn.com 代码示例 const express = require('express'); const { graphqlHTTP } = require('express-graphql'); const { makeExecutableSchema } = require('graphql-tools'); const { importSchema } = require('graphql-import'); const { ApolloServer } = require('apollo-server-express'); const { applyMiddleware } = require('graphql-middleware'); const { shield } = require('graphql-shield'); const resolvers = require('./resolvers'); const permissions = require('./permissions'); const typeDefs = importSchema('./schema.graphql'); const schema = makeExecutableSchema({ typeDefs, resolvers, }); const server = new ApolloServer({ schema: applyMiddleware(schema, shield(permissions)), introspection: true, playground: true, }); const app = express(); app.use('/graphql', graphqlHTTP({ schema, graphiql: true, })); server.applyMiddleware({ app }); app.listen(4000, () => { console.log(`GraphQL API server running at http://localhost:4000/graphql`); });
在浏览器中访问 http://localhost:4000/graphql,就可以使用 GraphQL Playground 来测试 API。
总结
本文介绍了如何使用 GraphQL 构建后端 API,包括定义数据模型、定义查询和变更、实现查询和变更以及使用 GraphQL Playground 测试 API。GraphQL 的灵活性可以提高应用的性能和效率,但同时也需要更多的开发工作。如果你正在构建一个需要高度灵活性和可扩展性的 API,GraphQL 可能是一个不错的选择。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/657d815cd2f5e1655d85a37e