graphQL未整理 发表于 2023-09-27 | 分类于 ---GraphQL | 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242前端-数据加载器 https://github.com/graphql/dataloaderhttps://github.com/graphql-java/graphql-javahttps://github.com/spring-projects/spring-graphqlhttps://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-6f26249f613aSpringBoot入门教程 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-simpledocker run --name mongo01 -d -p 27018:27017 mongouri: mongodb://10.11.12.232:27017/graphqlpostman 测试 POST http://127.0.0.1:9001/graphql body GraphQL1、添加 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:54https://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地址,提供所有请求。