国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術文章
文章詳情頁

Java 通過API操作GraphQL

瀏覽:99日期:2022-08-13 11:21:38

GraphQL可以通過Java的API來實現數據的查詢,通過特定的SDL查詢語句,獲取特定的查詢數據。相當于后端作為提供數據源的'數據庫',前端根據定義的SDL語句查詢需要的數據,將查詢數據的控制權交給前端,提高后端接口的通用性和靈活性

引入依賴

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

需要配置第三方的maven倉庫才可以下載這個jar包,要不然從中央倉庫無法下載。

官方網站,在快速開始中有需要配置的倉庫www.graphql-java.com

Java中使用GraphQL的API

根據定義的簡單查詢語法通過Java的API查詢數據

無參數簡單查詢

通過定義的查詢格式,通過GraphQL對象實現查詢,需要先構建響應的數據對象和構建響應的數據

/** * 簡單展示 GraphQL的查詢,以及通過JavaAPI響應數據 */public class GraphQLSimpleDemo { public static void main(String[] args) {// 定義數據響應對象GraphQLObjectType userType = createGraphQLObjectType();// 根據定義的數據響應對象構建響應的數據GraphQLFieldDefinition userDefinition = createGraphQLFieldDefinition(userType);// 創建查詢響應GraphQLSchema graphQLSchema = createGraphQLSchema(userDefinition);GraphQL graphQL = GraphQL.newGraphQL(graphQLSchema).build();// 查詢語句String graph1 = '{User{id, name}}';// 查詢多個字段String graph2 = '{User{id, name, age}}';// 執行查詢ExecutionResult execute = graphQL.execute(graph1);// 獲取結果System.out.println(execute.toSpecification());// 執行查詢ExecutionResult execute2 = graphQL.execute(graph2);// 獲取結果System.out.println(execute2.toSpecification()); } // 創建GraphQLSchema public static GraphQLSchema createGraphQLSchema(GraphQLFieldDefinition userDefinition) {GraphQLObjectType userQuery = GraphQLObjectType.newObject() .name('userQuery') .field(userDefinition) .build();return GraphQLSchema.newSchema().query(userQuery).build(); } /** * 創建GraphQLFieldDefinition對象 * * 根據定義的查詢對象做真正的查詢,返回查詢數據 * * 這里使用靜態對象構建數據,如果是查詢數據,可以在這里進行做查詢 * */ public static GraphQLFieldDefinition createGraphQLFieldDefinition(GraphQLObjectType userType) {return GraphQLFieldDefinition.newFieldDefinition().name('User').type(userType)// 靜態數據.dataFetcher(new StaticDataFetcher(new User(1L, '測試', 10))).build(); } /** * 定義GraphQLObjectType對象 * 該對象是用來做查詢響應對象的名稱和查詢的字段的定義 */ public static GraphQLObjectType createGraphQLObjectType() {return GraphQLObjectType.newObject().name('User').field(GraphQLFieldDefinition.newFieldDefinition().name('id').type(Scalars.GraphQLLong)).field(GraphQLFieldDefinition.newFieldDefinition().name('name').type(Scalars.GraphQLString)).field(GraphQLFieldDefinition.newFieldDefinition().name('age').type(Scalars.GraphQLInt)).build(); }}帶參數簡單查詢

自定義的查詢規范中,可以通過定義參數實現查詢,在API中可以獲取到參數通過參數實現自定義查詢,參數需要按照規范定義

/** * 簡單展示 GraphQL的查詢,以及通過JavaAPI響應數據 * * 傳遞參數進行查詢 */public class GraphQLSimpleDemoWithArgs { public static void main(String[] args) {GraphQLObjectType userType = createGraphQLObjectType();GraphQLFieldDefinition userDefinition = createGraphQLFieldDefinition(userType);GraphQLSchema graphQLSchema = createGraphQLSchema(userDefinition);GraphQL graphQL = GraphQL.newGraphQL(graphQLSchema).build();String graph3 = '{User(id:1){id, name, age}}';ExecutionResult execute3 = graphQL.execute(graph3);// 獲取結果System.out.println(execute3.toSpecification()); } // 創建GraphQLSchema public static GraphQLSchema createGraphQLSchema(GraphQLFieldDefinition userDefinition) {GraphQLObjectType userQuery = GraphQLObjectType.newObject() .name('userQuery') .field(userDefinition) .build();return GraphQLSchema.newSchema().query(userQuery).build(); } /** * 創建GraphQLFieldDefinition對象 * * 根據定義的查詢對象做真正的查詢,返回查詢數據 * * 這里使用靜態對象構建數據,如果是查詢數據,可以在這里進行做查詢 * */ public static GraphQLFieldDefinition createGraphQLFieldDefinition(GraphQLObjectType userType) {return GraphQLFieldDefinition.newFieldDefinition().name('User').type(userType)// 設置參數查詢數據.argument(GraphQLArgument.newArgument().name('id').type(Scalars.GraphQLLong).build()).dataFetcher(environment -> { Long id = environment.getArgument('id'); return new User(id, 'name' + id, id.intValue());}).build(); } /** * 定義GraphQLObjectType對象 * 該對象是用來做查詢響應對象的名稱和查詢的字段的定義 */ public static GraphQLObjectType createGraphQLObjectType() {return GraphQLObjectType.newObject().name('User').field(GraphQLFieldDefinition.newFieldDefinition().name('id').type(Scalars.GraphQLLong)).field(GraphQLFieldDefinition.newFieldDefinition().name('name').type(Scalars.GraphQLString)).field(GraphQLFieldDefinition.newFieldDefinition().name('age').type(Scalars.GraphQLInt)).build(); } }

上面兩個關于GraphQL的簡單示例,一個是沒有參數的查詢,一個是通過傳遞參數的查詢,可以看出來,GraphQL的在查詢數據的控制權交給定義的查詢語句,GraphQL構建的數據作為基礎的數據源,如果使用GraphQL定義的接口具有靈活性和通用性,但是可以看出來,在使用方面也是較為復雜,并且接口多和較為復雜的情況下,相對于Restful來講,較為復雜,兩種方式各有優缺點

下一篇,將簡單示例在Springboot中使用GraphQL定義接口~~

以上就是Java 通過API操作GraphQL的詳細內容,更多關于Java 操作GraphQL的資料請關注好吧啦網其它相關文章!

標簽: Java
相關文章:
主站蜘蛛池模板: 啪啪一级片| 亚洲三级成人 | 久久综合久久久久 | 在线观看国产日本 | 国产欧美va欧美va香蕉在线观 | 国产在线视频专区 | 一级毛片在线视频 | 亚洲成综合 | 久久香蕉国产视频 | 国产一级aa大片毛片 | 久久精品爱国产免费久久 | 在线视频一区二区三区 | 欧美一区二区三区不卡片 | 国产真实孩交 | 性做久久久久免费观看 | 国产伦精品一区二区三区免费 | 国产精品亚洲综合久久 | 国产成人深夜福利短视频99 | 国产午夜精品久久久久九九 | 欧美久久亚洲精品 | 在线观看黄网视频免费播放 | 女高中生被cao到哭视频 | a级片在线观看 | 99视频九九精品视频在线观看 | 女人一级特纯黄大片色 | 国内美女福利视频在线观看网站 | 亚洲香蕉久久一区二区三区四区 | 男人的天堂欧美精品色偷偷 | 精品日韩欧美一区二区三区在线播放 | 99久久国语露脸精品对白 | 孕妇交 | 一区二区3区免费视频 | 精品一区二区三区五区六区 | 亚洲国产视频网 | 日本免费一区尤物 | 美女操男人 | 美女扒开双腿让男人爽透视频 | 女人张开双腿让男人 | 免费看岛国视频在线观看 | 欧美三级不卡在线观看视频 | 国产不卡视频在线观看 |