【问题标题】:How to make multiple API calls in sequential order如何按顺序进行多个 API 调用
【发布时间】:2019-10-05 14:09:00
【问题描述】:

我需要调用两个 API A1 和 A2,但不能并行。仅当 A1 在其 JSON 响应中返回某个标志值时,才会调用 A2。

我知道如何使用 Httpclient 在 java 中进行 http 调用。一种方法是编写一个代码进行第一次调用并解析其响应,然后再次使用相同的代码进行另一次调用。他们是否有任何其他智能方式可以为我们自动执行此过程,我将同时传递请求和条件第二个需要像在 Rxjava 中一样调用

以下是 Rxjava 代码 sn-p(参考:(RxJava Combine Sequence Of Requests))

api1.items(queryParam)
.flatMap(itemList -> Observable.fromIterable(itemList)))
.flatMap(item -> api2.extendedInfo(item.id()))
.subscribe(...)

我如何在 Java 中实现这一点?是否有任何 Java 功能已经存在并允许我进行多次顺序调用?

我尝试搜索现有的解决方案,但它们不在 Java 中。

【问题讨论】:

  • "如果任何 java 类已经存在让我们进行顺序调用?" - 你的意思是......像HTTPClient
  • 是什么意思“。如果任何java类已经存在让我们进行顺序调用?”
  • 你能不能简单地有一段Java代码1)发出对A1的调用并接收响应; 2) 解析响应并检查适当的标志值; 3) 根据标志值,调用 A2 还是不调用?
  • 为了更清楚,我已经编辑了这个问题。请看一下。谢谢!

标签: java rest synchronous sequential


【解决方案1】:

您可以使用HttpURLConnection 进行 API 调用。

检查响应并相应地触发另一个呼叫。

像这样的

public static void main(String[] args) throws IOException {

    String response1 = sendGET("http://url1");
    if(response1 != null && response1.contains("true")){
        String response2 = sendGET("http://url2");
    }

}

private static String sendGET(String url) throws IOException {
    URL obj = new URL(url);
    StringBuffer response = new StringBuffer();
    HttpURLConnection con = (HttpURLConnection) obj.openConnection();
    con.setRequestMethod("GET");
    int responseCode = con.getResponseCode();
    System.out.println("GET Response Code :: " + responseCode);
    if (responseCode == HttpURLConnection.HTTP_OK) { // success
        BufferedReader in = new BufferedReader(new InputStreamReader(
                con.getInputStream()));
        String inputLine;
        while ((inputLine = in.readLine()) != null) {
            response.append(inputLine);
        }
        in.close();

        // print result
        System.out.println(response.toString());
    } else {
        System.out.println("GET request not worked");
    }
    return response.toString();
}

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-28
  • 2019-08-30
  • 2011-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多