GraphQL和restful简介
GraphQL是数据查询语言,是Restful API的替代品
GraphQL 是 API 查询语言,不是数据库查询语言,它跟 REST 是同一层次的东西,没有筛选/排序/分组/聚合这类语法,这些都是需要我们自己实现的。
特点:
请求需要的数据不多不少。
获取多个资源,只用一个请求。
比如请求接口A,获取到字段B,然后根据字段B,去请求接口C,获取到字段D,再根据字段D,去请求接口E。
这样的依赖关系,可以使用GraphQL一次解决。
描述所有可能类型,便于维护,根据需求平滑演进,添加或隐藏字段。
- restful:Representational State Transfer表示
属性状态转移
。本质上就是用定义uri,通过API接口来取得资源。通用系统架构,不受语言限制。
GraphQL和restful对比
- restful一个接口只能返回一个资源,graphQL一次可以获取多个资源
- restful用不同的url来区分资源,graphQL用类型区分资源。
GraphQL Sever使用
简单使用
1 | var express = require("express") |
我们就可以进行请求了:
1 | query { |
返回值:
1 | { |
进阶使用
返回嵌套的数据和自定义参数
1 | var schema = buildSchema(` |
调用如下:
1 | query { |
基本参数类型
- String
- Int
- Float
- Boolean
- ID
[类型]
:表示数组,eg:[Int]!
:表示参数不能为空
1 | var schema = buildSchema(` |
调用如下:
1 | query { |
GraphQL Client使用
在客户端访问myurl接口
1 | var username = 3 |
修改数据Mutations
- 查询使用
Query
,修改数据使用Mutation
1 | var schema = buildSchema(` |
调用如下:
1 | mutation { |
认证和中间件
- 中间件的本质就是一个function,在接口执行之前就拦截请求,然后在决定是否能接着往下走
1 | var express = require("express") |
Constructing Types
- 使用GraphQLObjectType定义type(类型)
1 | const schema = buildschema{` |
使用类型替换上述的字符串:
1 | // 1.将type Account字符串 修改成一个 GraphQLObjectType类型 |