我有一个使用GraphQL kickstarter和spring Boot starter开发的服务,现在我想使用spring boot.Kindly消费graphql api中的数据,给我任何使用spring boot消费graphQL api的建议。
以下是示例请求
查询getBookdetail($isbnCode:String!){ getBookdetails(isbnCode:$isbnCode){ title isbn }}
发布于 2020-06-30 22:49:26
使用graphql API可以通过以下步骤完成
从您的graghQL应用程序接口生成模式文件,它将为您提供schema.json数据示例:http://localhost:8080/graphql/schema.json
在项目中创建文件夹src/main/graphql,将schema.json文件放在该文件夹中,在项目的src/main/graphql中创建一个带有.graphql的文件,然后复制上面的查询
query getBook($isbn:String!){
book1:getBook(isbn:$isbn){
title
}
}
将以下依赖项添加到pom.xml文件中
dependency>
<groupId>com.apollographql.apollo</groupId>
<artifactId>apollo-runtime</artifactId>
<version>2.2.0</version>
</dependency>
<plugin>
<groupId>com.github.sparow199</groupId>
<artifactId>apollo-client-maven-plugin</artifactId>
<version>3.2.0</version>
<executions>
<execution>
<goals>
<goal>generate</goal>
</goals>
<configuration>
<rootPackageName>com.example.graphqlAPI</rootPackageName>
</configuration>
</execution>
</executions>
</plugin>
运行以下命令以生成java文件mvn clean generate -source生成的文件将在目标文件夹中可用
将生成的java文件复制到项目文件夹中。
完成上述步骤后,您可以使用apollo客户端进行消费
package com.example.graphqlAPI.Controller;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.apollographql.apollo.ApolloCall.Callback;
import com.apollographql.apollo.ApolloClient;
import com.apollographql.apollo.api.Response;
import com.apollographql.apollo.exception.ApolloException;
import com.example.graphqlAPI.GetBookQuery;
import okhttp3.OkHttpClient;
@RestController
@RequestMapping("/api")
public class ApolloClientController {
private static final int TIMEOUT = 5000;
private static final org.slf4j.Logger LOGGER = LoggerFactory.getLogger(ApolloClientController.class);
@GetMapping("/prod")
public Map<String,Object> processApi(@RequestParam (required = false) String isbn ){
Map<String,Object> hm = new HashMap<String, Object>();
OkHttpClient okHTTPCLIENT = new OkHttpClient.Builder().build();
ApolloClient client = ApolloClient.builder().serverUrl("http://localhost:8080/graphql")
.okHttpClient(okHTTPCLIENT).build();
CountDownLatch lock = new CountDownLatch(1);
client.query(GetBookQuery.builder().isbn(isbn).build()).enqueue(new Callback() {
@Override
public void onResponse(Response response) {
// TODO Auto-generated method stub
LOGGER.info("Res: {}", response.getData());
hm.put("Response", response.getData());
lock.countDown();
}
@Override
public void onFailure(ApolloException e) {
// TODO Auto-generated method stub
LOGGER.info("Err: {}", e);
lock.countDown();
hm.put("Error", "Error while fetchiing the data");
}
});
try {
lock.await(TIMEOUT, TimeUnit.MILLISECONDS);
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
return hm;
}
}
https://stackoverflow.com/questions/62531489
复制相似问题