首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >java中两个GraphQL api之间的通信

java中两个GraphQL api之间的通信
EN

Stack Overflow用户
提问于 2020-06-23 17:26:09
回答 1查看 570关注 0票数 0

我有一个使用GraphQL kickstarter和spring Boot starter开发的服务,现在我想使用spring boot.Kindly消费graphql api中的数据,给我任何使用spring boot消费graphQL api的建议。

以下是示例请求

查询getBookdetail($isbnCode:String!){ getBookdetails(isbnCode:$isbnCode){ title isbn }}

EN

回答 1

Stack Overflow用户

发布于 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的文件,然后复制上面的查询

代码语言:javascript
运行
复制
query getBook($isbn:String!){
    book1:getBook(isbn:$isbn){
     title
    } 
}

将以下依赖项添加到pom.xml文件中

代码语言:javascript
运行
复制
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客户端进行消费

代码语言:javascript
运行
复制
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;
    }

}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62531489

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档