Browsed by
标签:GraphQL

Spring Boot与GraphQL – 篇三 集成开发

Spring Boot与GraphQL – 篇三 集成开发

[toc] Spring Boot与GraphQL – 篇三 集成开发 在了解了GraphQL相关概念,以及使用的方法后,就该进入到实操阶段了。使用常用的springboot来搭建服务,并提供GraphQL查询。 配置 在Spring Boot中集成GraphQL非常简单,只需引入两个包 pom.xml <dependency> <groupId>com.graphql-java</groupId> <artifactId>graphql-spring-boot-starter</artifactId> <version>4.0.0</version> </dependency> <dependency> <groupId>com.graphql-java</groupId> <artifactId>graphql-java-tools</artifactId> <version>4.3.0</version> <dependency> 定义Schema 推荐在resources目录下建立graphql文件夹,在其中建立root.graphqls和schema.graphqls两个文件。一般会在root.graphqls文件中放Query或者Mutation的接口定义,在schema.graphql…

阅读全文 Read More

Spring Boot与GraphQL – 篇二 Schema格式与规范

Spring Boot与GraphQL – 篇二 Schema格式与规范

模式 Schema 在了解了GraphQL是如何查询以及如何变更数据后,我们需要进一步了解一下。对于客户端来说,需要在请求数据前知道数据的格式,包括有哪些field,这些字段的子对象又有哪些,子对象又是什么样的数据结构。这样就出现了schema的概念。 对象类型与字段 在GraphQL的schema中,构成的基本元素就是对象object类型type,即指定你想要获取的对象,以及想要获取的对象的字段,例如: type Character { name: String! appearsIn: [Episode!]! } Character定义了一个为GraphQL对象类型 name和appearsIn为Character类型中的字段 String是一个预定义的标量类型 String!表示此字段不可为空 [Episode!]!表示返回的是一个Episode对象列表,并且也是非空的 参数 每个GraphQL对象的字段都可以有若干个参数,例如下面例子中的length字段: type Starship { id: ID! name: String! length(unit: LengthUnit = METER): Float } 参数都需要预先定义好,例如上面例子中,unit就是length的一个参数。参数可以是必需也可以是可选,当一个参数是可选时,可以定义默认值。如果不给unit传递参数,那么METER即为默认值。 查询与变更类型 schema中大多数类型都是对象类型,除此之外,还有两种重要类型:查询que…

阅读全文 Read More

Spring Boot与GraphQL – 篇一 如何进行查询

Spring Boot与GraphQL – 篇一 如何进行查询

背景介绍 GraphQL,由Facebook开源,并在github api v4中得到了使用,替代了v3中restful的地位。既然大厂使用,那就得去看看到底是个什么货色。 GraphQL相对于传统的restful接口,主要是在灵活性上有较大改进。例如,要增加一个属性返回,之前的做法可能需要更改接口的返回对象;如果属性越加越多,可能衍生出多个接口(包含返回少量的和大量的数据),也可能由此诞生一个巨大的接口(包含所有的数据);如果是多个对象的组合,由于组合的形式多种多样,有可能也会造成多个接口的产生。 而解决此缺点的做法是,客户端根据自己的需求来传递请求参数,参数中指明需要哪些数据,则服务器端根据这些参数返回给客户端所需要的数据。这样,关于数据的特定字段、或者组合、聚合类的需求,都无需服务端关心,客户端自己确定就好。 查询与变更 Queries and Mutations 字段 Fields 客户端通过指定Fields来控制返回的数据,Fields即为请求的数据,类似字段的含义。指定了服务端定义好的标量,例如: 请求 { hero { name # Queries can have comments! friends { name } } } 响应 { “data”: { “hero”: { “name”: “R2-D2”, “friends”: [ { “name”: “Luke Skywalker” }, { “name”: “Han Solo” }, { “name”: “Leia Organa…

阅读全文 Read More