一种用于 API 的查询语言:GraphQL 既是一种用于 API 的查询语言也是一个满足你数据查询的运行时。 GraphQL 对你的 API 中的数据提供了一套易于理解的完整描述,使得客户端能够准确地获得它需要的数据,而且没有任何冗余,也让 API 更容易地随着时间推移而演进,还能用于构建强大的开发者工具。
- 安装
- 使用
- Hello world
- Schema
- Type
- 插件
npm install graphql
Or
yarn add graphql
- 描述数据:buildSchema()
- 请求所需数据:graphql(schema, '{ hello }', root)
- 得到结果:console.log(response)
var { graphql, buildSchema } = require('graphql');
// 描述数据
var schema = buildSchema(`
type Query {
hello: String
}
`);
var root = { hello: () => 'Hello world!' };
// 请求所需数据
graphql(schema, '{ hello }', root).then((response) => {
// 得到结果
console.log(response);
});
Schema
是用来描述 API 的整个结构以及结构直接的关系,它看起来很像 JSON 数据结构,但是在描述能力上比 JSON 更加的强大,并且内置了很多类型,可以定义变量、参数等等。以下是一个简单的 Schema
:
type User {
id: ID
name: String!
}
Schema
有完善的类型系统,通过这些类型,我们可以描述出千变万化的数据:
- 对象类型
- 字段
- 查询&变更类型
- 标量类型
- 枚举类型
- ...
type Query {
user(id: ID): User
users: [User]!
}
enum Gender {
FEMALE
MALE
}
type User {
id: ID
name: String!
gender: Gender
}
User
是对象类型name
和gender
是User
上的字段String
是内置标量类型之一String!
表示name
字段是非空的[User]!
表示 User 数组,它也是非空的Gender
表示枚举类型
当然 GraphQL 可以运行在任何后端框架或者编程语言之上,我们只会专注在类型系统如何描述可以查询的数据,具体的数据实现由各个服务端去完成内部的逻辑。
- express-graphql
- egg-graphql
- apollo-server
- apollo-server-express
- apollo-server-koa
- apollo-server-hapi
- apollo-server-lambda
- apollo-server-azure-functions
- apollo-server-cloud-functions
- apollo-server-cloudflare
- apollo-client
- graphql-request
- grafoo