graphQL未整理

第二次:未整理

2023-11-23 下午在看到了码云竟然已经用上了,说明它可以的,我还是需要再写demo,或者问 GPT。
在这里插入图片描述

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
2023-11-24 09:03:28

1、路径只有一个,不需要多个接口

2、我只拿我需要的数据,不需要多余的数据

3、我需要的数据,我可以一次性拿到,不需要多次请求

4、还可以做缓存

5、还可以做权限控制

6、还可以做数据校验

7、还可以做数据转换

8、还可以做数据聚合

9、还可以做数据分析

10、还可以做数据过滤

11、还可以做数据排序

12、还可以做数据分页

13、还可以做数据联合

14、还可以做数据预加载

15、还可以做数据批量加载

16、还可以做数据分片加载

17、还可以做数据分片合并

18、还可以做数据分片排序

19、还可以做数据分片分页

20、还可以做数据分片联合

21、还可以做数据分片预加载

22、还可以做数据分片批量加载

23、还可以做数据分片分片加载

24、还可以做数据分片分片合并

25、还可以做数据分片分片排序

26、还可以做数据分片分片分页

27、还可以做数据分片分片联合

28、还可以做数据分片分片预加载

29、还可以做数据分片分片批量加载

30、还可以做数据分片分片分片加载

第一次:未整理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
前端-数据加载器   https://github.com/graphql/dataloader
https://github.com/graphql-java/graphql-java
https://github.com/spring-projects/spring-graphql
https://docs.spring.io/spring-graphql/reference/index.html

√ 文档 https://graphql.org/learn/
常见问题 https://graphql.org/faq/#why-should-i-use-graphql
语言支持 https://graphql.org/code/

https://www.howtographql.com/
---------
使用 REST,可以轻松缓存每个端点的数据,因为可以确定数据的结构不会改变。
对于 GraphQL,并不清楚客户端接下来会请求什么,因此在 API 后面放置一个缓存层没有多大意义。

在后端,GraphQL 服务器可以用任何可用于构建 Web 服务器的编程语言来实现。除了 Javascript 之外,还有 Ruby、Python、Scala、Java、Clojure、Go 和 .NET 的流行参考实现。
由于 GraphQL API 通常通过 HTTP 运行,因此任何可以使用 HTTP 的客户端都可以从 GraphQL 服务器查询数据。

GraphQL 是API 的查询语言,而不是数据库。
GraphQL 通常被解释为一种专注于前端的 API 技术,因为它使客户端能够以比以前更好的方式获取数据。
GraphQL 对于前端开发人员来说特别有用,因为它完全消除了 REST API 所遇到的许多不便和缺点,例如过度获取和不足。
复杂性被转移到服务器端,强大的机器可以处理繁重的计算工作。
客户端不必知道它获取的数据实际上来自哪里,并且可以使用单一、连贯且灵活的 API。

让我们考虑一下 GraphQL 带来的主要变化,即从相当命令式的数据获取方法转变为纯粹的声明性方法。

从 REST API 获取数据时,大多数应用程序必须执行以下步骤:
1. 构造并发送 HTTP 请求(例如fetch在 Javascript 中)
2. 接收并解析服务器响应
3. 本地存储数据(简单地存储在内存中或持久存储)
4. 在 UI 中显示数据
使用理想的声明式数据获取方法,客户端不应执行超过以下两个步骤的操作:
1. 描述数据要求
2. 在 UI 中显示数据
---------

GraphQL Server 基础知识(第一部分):GraphQL 模式、TypeDef 和解析器解释
=> https://www.prisma.io/blog/graphql-server-basics-the-schema-ac5e2950214e
GraphQL Server 基础知识(第二部分):网络层
=> https://www.prisma.io/blog/graphql-server-basics-the-network-layer-51d97d21861
GraphQL Server 基础知识(第三部分):揭秘infoGraphQL 解析器中的参数
=> https://www.prisma.io/blog/graphql-server-basics-demystifying-the-info-argument-in-graphql-resolvers-6f26249f613a

SpringBoot入门教程 https://www.graphql-java.com/tutorials/getting-started-with-spring-boot/
实操案例 ===> Desktop\graphQL\graphQL-demo01
===> https://github.com/graphql-java/tutorials
文档-快速入门 https://www.graphql-java.com/documentation/master/getting-started/




GraphQL + SpringBoot + React应用开发
视频地址 https://www.bilibili.com/video/BV1LQ4y1a72k/
项目源码地址 https://github.com/spring2go/graphql_event_app

DGS文档 https://netflix.github.io/dgs/getting-started/



微信读书
4.3 Spring GraphQL
https://weread.qq.com/web/reader/f2632f50813ab6e2eg0164da





<dependency>
<groupId>com.graphql-java</groupId>
<artifactId>graphql-java</artifactId>
<version>20.6</version>
</dependency>




https://gitee.com/fantasyding/graphql-spring-boot-simple

docker run --name mongo01 -d -p 27018:27017 mongo

uri: mongodb://10.11.12.232:27017/graphql

postman 测试

POST http://127.0.0.1:9001/graphql

body GraphQL


1、添加
mutation CreatePerson($input: PersonInput!) {
createPerson(input: $input) {
id
name
age
email
createDate
}
}

{
"input": {
"name": "陶攀峰",
"age": 18,
"email": "18019@qq.com"
}
}

2、查询
query{
getPersonByName(name: "陶攀峰"){
id
name
age
email
createDate
}
}

3、分页
query getAllPersons($personQuery:PersonQuery){
getAllPersons(personQuery:$personQuery) {
items{
name
age
email
createDate
}
pageNo
pageSize
total
}
}

{
"personQuery": {
"pageNo": 1,
"pageSize": 10
}
}







2023-09-28 17:00:54
https://graphql.cn/learn/




查询和其结果拥有几乎一样的结构。这是 GraphQL 最重要的特性



query{
# 别名
taopanfeng:getPersonByName(name: "陶攀峰"){
id
taopanfeng:name # 别名
},
bob:getPersonByName(name: "Bob"){
id
bob:name # 别名
}
}


# query 操作名称 变量定义(默认变量)
# query 可省略 除非你要定义 操作名称 或 变量
# ($name:String!) 变量必传
query byName ($name:String="陶攀峰"){
getPersonByName(name: $name){
id
name
}
}
{
"name":"Bob"
}


# 动态控制是否显示
# @include(if: Boolean) true显示字段
# @skip(if: Boolean) true隐藏字段
query byName ($name:String!, $withName:Boolean!){
getPersonByName(name: $name){
id
name @include(if: $withName)
email
}
}
{
"name":"Bob",
"withName":false
}



query{
getPersonByName(name:"Bob"){
__typename # 获取源字段 返回值类型 "Person"
id

# 返回值类型为 Person 时,多返回一个 name 字段
... on Person{
name
}
}
}


{
# 哪些类型可用
__schema {
types {
name
}
}
}

{
# 查询类型
__schema {
queryType {
name
}
}
}

{
__type(name: "Person") {
name
kind
description
}
}



一个HTTP地址,提供所有请求。