GraphQL学习笔记 #83
zhangyu1818
announced in
zh-cn
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
-
什么是 GraphQL
GraphQL,是 Facebook 开源的一种 api 查询语言,对查询数据提供了一套完整的描述,客户端可以精准的获取需要的数据,而没有任何冗余
最基础的查询方式如上图,左边是请求,右边是响应,我希望获取
todoList
这个集合,集合里的每一个元素都包括_id,content,completed
字段,服务端返回的数据就是我请求需要的数据,不会多也不会少GraphQL 的基础概念——Query
todo
表示这是一个 GraphQL 的对象_id
、content
和completed
是todo
中的字段,ID
、String
、Boolean
都是 graphql 内置的类型String!
表示这个字段的值为String
类型且不可为空接着创建一个查询
Query
和Mutetion
都是 GraphQL 的关键字,一个代表查询,一个代表变更,在这里使用了Query
创建了一个查询[todo]!
表示字段todoList
的值是一个上面定义的todo
类型的数组,[todo]!
表示这个字段要么是空数组[]
,要么是元素为todo
的数组[todo,todo,...]
GraphQL 中的数据类型
Int
: 有符号的 32 位整数Float
: 有符号的双精度浮点值String
: UTF‐8 的字符串Boolean
: 布尔ID
: 唯一的标识,在序列化为String
时表示人类不可读的还可以自定义类型
搭建 GraphQL 服务器
了解了查询,就来创建一个 GraphQL 的服务器吧
我使用的是Apollo GraphQL,这是一个非常完整的 GraphQL 的实现,包括了客户端和服务端
node 服务器使用的是koa
现在就开始吧
首先创建一个项目,然后安装以下依赖
根目录创建
app.js
文件接着运行
node app.js
,在http://localhost:4000/graphql
就能看见apollo server
提供的playground
了查询
在左边输入上方的查询,右边就会出现 mock 的数据了
添加 resolvers
resolvers 是用于解析 typeDefs 查询的解析器,是一个键为
type
名,值为一个函数的映射在
app.js
中添加resolvers
再次查询,返回的结果就是
data
的数据了GraphQL 的基础概念——Mutation
Mutation 可以对应 REST API 中的 CRUD,一个简单的
mutation
如下在
typeDefs
中增加这是一个 Mutation 的操作,增加一个
todo
项,返回一个updateResponse
对象addTodo(content: String)
接收一个为String
类型的参数updateResponse
值包括一个键名为success
值为Boolean
和一个键名为todoList
值为todo
的数组在 playground 中执行
修改 resolvers
函数中具体的参数可查阅Resolver type signature
执行
mutation
表示这是一个mutation
操作,操作名为addTodo
,接收一个名为content
类型为String
的参数,返回的数据是success
和todoList
在 nodejs 的控制台能看见 console 出来的参数
在客户端中使用 GraphQL
官方提供了包括
react
、react-native
、vue
、augular
、native-ios
...等在 creact-react-app 中使用
虽然官方提供了组件模式的
Query
和Mutation
组件,不过我在学习过程中,用的还是直接以 JS 写的方法模式,Client api 参考在
create-react-app
的项目中安装依赖npm install apollo-boost react-apollo graphql --save
创建
client.js
,并在package.json
中增加proxy
提供 IDE 支持
我使用的是 webstorm 是一款集成功能非常强大的 IDE,在 plugins 里搜索安装
JS GraphQL
导出
schema.json
npm install -g apollo-codegen
apollo-codegen introspect-schema http://localhost:4000/graphql --output graphql.schema.json
webstrome 就会提供非常智能的 graphql 代码格式化和补全功能了
Demo
学习过程中写了 2 个 demo
客户端
服务端
不懂的地方依旧很多,文档是英文的又特别复杂,路漫漫其修远兮~
不知何什么时候才能搭一个基于 graphql 的博客呢,wordpress 又慢又重,最主要的还是看不懂……
Beta Was this translation helpful? Give feedback.
All reactions