GraphQL
为了方便理解,这里从一个例子出发来理解GraphQL
通常情况下,当你想获取有关书籍和作者的详细信息时,用REST API的风格写为:
/api/books /api/authors
如果用GraphQL的话,写成如下:
query GetBooks { books{ title author } }
结果如下:
上面这个例子中:
query是一种操作类型,GetBooks是一个任意的操作名称(你自己起的名字).
也可以进行查询嵌套:(如下所示)
query GetBooks { books{ title author{ friends { phoneNumber } } } }
如果后端有相关信息就可以查到信息
其他几个常见的基础知识
ARGUMENTS:
{ human(id: "1000") { name height } } #响应 { "data": { "human": { "name": "Luke Skywalker", "height": 1.72 } } }
这里的语法允许你对结果进行过滤。(查找id为1000的人的相关信息)
ALIASES:
{ empireHero: hero(episode: EMPIRE) { name } jediHero: hero(episode: JEDI) { name } } #响应 { "data": { "empireHero": { "name": "Luke Skywalker" }, "jediHero": { "name": "R2-D2" } } }
这里的语法允许你在响应的JSON中创建额外的字段。此处响应中两个字段中都有 "hero"。通过使用别名,可以将它们区分。实际上是 前缀+共有字段
的形式。
FRAGMENTS:
fragment NameParts on Person { firstName lastName } query GetPerson { people(id: "7") { ...NameParts avatar(size: LARGE) } } #注意:上面与下面是等价的 query GetPerson { people(id: "7") { firstName lastName avatar(size: LARGE) } }
类似于...xxx的形式就
表示fragments,作用就是使得某一字段可以被复用,从而避免每次都输入同一组字段
VARIABLES(变量):
# $episode: Episode -----> $变量:变量类型 query HeroNameAndFriends($episode: Episode) { hero(episode: $episode) { name friends { name } } } #变量赋值 # "变量":"具体的值" { "episode": "JEDI" } #响应 { "data": { "hero": { "name": "R2-D2", "friends": [ { "name": "Luke Skywalker" }, { "name": "Han Solo" }, { "name": "Leia Organa" } ] } } }
参考
https://www.apollographql.com/docs/react/data/fragments/
https://graphql.org/learn/queries/
https://www.youtube.com/watch?v=PQvux9OAaBE
以上为GraohQL基础知识,今天开个头,后面会继续