1,安装brew在国内
zhuanlan.zhihu.com/p/404417025 配置国内brew的源的方式
brew命令就有点像python的pip,vue的nom,yaml都需要一个代理,不能直接访问国外的网址,太慢或被防火墙挡了。
他们说用阿里的代理比较好,我用的好像是中科大的,下面是阿里的
# 查看 brew.git 当前源
$ cd "$(brew --repo)" && git remote -v
origin https://github.com/Homebrew/brew.git (fetch)
origin https://github.com/Homebrew/brew.git (push)
# 查看 homebrew-core.git 当前源
$ cd "$(brew --repo homebrew/core)" && git remote -v
origin https://github.com/Homebrew/homebrew-core.git (fetch)
origin https://github.com/Homebrew/homebrew-core.git (push)
# 修改 brew.git 为阿里源
$ git -C "$(brew --repo)" remote set-url origin https://mirrors.aliyun.com/homebrew/brew.git
# 修改 homebrew-core.git 为阿里源
$ git -C "$(brew --repo homebrew/core)" remote set-url origin https://mirrors.aliyun.com/homebrew/homebrew-core.git
# zsh 替换 brew bintray 镜像
$ echo 'export HOMEBREW_BOTTLE_DOMAIN=https://mirrors.aliyun.com/homebrew/homebrew-bottles' >> ~/.zshrc
$ source ~/.zshrc
# bash 替换 brew bintray 镜像
$ echo 'export HOMEBREW_BOTTLE_DOMAIN=https://mirrors.aliyun.com/homebrew/homebrew-bottles' >> ~/.bash_profile
$ source ~/.bash_profile
# 刷新源
$ brew update
相关的安装命令:
brew install --cask graphql-playground
2,相关的代码说明
开始使用GraphQL Java和Spring Boot juejin.cn/post/684490…
3,post请求中的语法
这个参数确实不是很友好,graphql没有推行好可能也是这个原因。
4,graphql的语法
4.1,总体说明
查询的标准
选择集(selection set) 是一个会在GraphQL 文档中经常出现的概念,它赋予了GraphQL递归的特性,允许你获取嵌套形式的数据。
4.2, 参数说明
这里介绍了参数如何定义query(在这里定义变量如id$:ID) 注意:后面的ID是指类型,不是变量,就是唯一不重复的意思,是不是也可以改为Int的?居然不行。是否因为我们的type中定义的就是ID的?
改为int试试,果然就正常了
4.3,我用了参数后为什么没有结果显示出来的?哪里有问题的?
搞错了,将参数输入了到头上去了,所以id一直没有值,改完后就正常了,如下
4.4,graphql自带的类型
ID: 就类似传统数据库中的ID 字段,主要用于区别不同的对象。可以直接是一个Int, 也可能是一个编码过的唯一值,比如常见的relay 中使用的是“类名:ID” 的字符串再经base64 转码后的结果作为ID. 要注意的是这个ID 只是存在于Graphql 中的。它不一定和数据库中的是对应的。比如relay 这个情况,数据库中存的可能还是一个整数并不是那个字符串。
Int: 整数,可正负。
Float: 双精度浮点数,可正负。
String: UTF-8 字符的字符串。
Boolean: true / false.
Graphql 中支持枚举类型,可以这样定义:
enum GenderTypes {
MALE
FEMALE
OTHERS
}
4.5,自定义类型
定义一个类型的Graphql 写法很简单,比如我们新增一个Date 类型。
scalar Date
4.6 接口(Interface) 和联合类型(Union)
nterface 和其他语言的类似,都是为了给一个通用的父类型定义用的,注意这里接口中的字段在实际的实体上面还是需要重新再写的,不能说不写的
interface Animal {
id: ID!
name: String
}
type Dog implements Animal {
id: ID!
name: String
breed: String
}
type Cat implements Animal {
id: ID!
name: String
color: String
}
但查询的语句你要这样写
query
{Aniaml
{id
name
.. on Dog{
breed
}
}
}
Union 可以直接理解成是没有共同字段的Interface 写法与interface一样。
4.7输入类型 Input types
如果入参是一个对象,则可以用Input types,用法如下
type Mutaion {
createSomething(foo: Int, bar: Float): Something
}
等同于
input CreateSomethingInput {
foo: Int
bar: Float
}
type Mutaion {
createSomething(input: CreateSomethingInput): Something
}
4.8 graphql的官方文档
这里也有参数的说明
4.9 读下这段代码
public DataFetcher getBookByIdDataFetcher() {
// 找到指定id的书
return dataFetchingEnvironment -> {
String bookId = dataFetchingEnvironment.getArgument("id");
return books
.stream()
.filter(book -> book.get("id").equals(bookId))
.findFirst()
.orElse(null);
};
}
public DataFetcher getAuthorDataFetcher() {
// 找到指定作者ID的人
return dataFetchingEnvironment -> {
Map<String,String> book = dataFetchingEnvironment.getSource();
String authorId = book.get("authorId");
return authors
.stream()
.filter(author -> author.get("id").equals(authorId))
// 这里的id不是指那个大的入参,而是因为这个实体也有一id字段
.findFirst()
.orElse(null);
};
}
这里有一个问题,不同文件中的graphql中的实体是否可以共用的?可以改为两个文件试试。
resouce这个类是不是可以同时加载两个文件的?
getAuthorDataFetcher是不是可以设置增加参数的获取的?