LoginSignup
0
0

More than 1 year has passed since last update.

【Java】HttpClientでAPIを叩いてみる①

Last updated at Posted at 2023-03-01

HttpClient

この記事がよくまとまっていてわかりやすかった。

Java 8以前のバージョンでは、HttpURLConnectionクラスを利用する方法が一般的だった。しかし、このクラスはJava SE 1.1の頃(1996年)に追加された非常に古いもので、機能面でも使い勝手の面でも、現在のアプリケーション開発で使うには多くの問題を抱えている。

HTTPクライアントAPIの特徴としては、次の点が挙げられる。

  • HTTP/2をサポート
  • WebSocketをサポート
  • リクエスト/レスポンスをリアクティブストリームとして処理
    ...etc

ちらほら出てくるHTTP/2について。
スクリーンショット 2023-03-01 14.21.32.png

画像引用
https://www.kagoya.jp/howto/it-glossary/security/http-2/

リファレンス。

環境

System Version
OS MacOS Monterey(12.1)
Intelli J 2022/2/2
sdk Temurin 11.0.14

APIを叩く

内閣官房が出しているコロナに関するAPIを叩いてみる。

絞り込みは昨日までの東京都の累計コロナ感染者数を見る。
(2023年3月1日 現在)

Corona.java
package API;

import java.io.IOException;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

public class Corona {
    public static void main(String[] args) {
        String url = "https://opendata.corona.go.jp/api/Covid19JapanAll?dataName=東京都&date=20230228";
        HttpClient client = HttpClient.newHttpClient();
        HttpRequest req = HttpRequest.newBuilder()
                .uri(URI.create(url))
                .GET()
                .build();
        try {
            HttpResponse<String> res = client.send(req, HttpResponse.BodyHandlers.ofString());
            System.out.println(res);
            System.out.println(res.body());
        } catch (IOException | InterruptedException ex) {
            ex.printStackTrace();
        }
    }
}

send()メソッドにより、
IOExceptionInterruptedExceptionの例外処理が必須。

.GET()はなくてもデフォルトでGETメソッドになるみたい。

public static HttpClient newHttpClient()
デフォルト設定には: "GET"リクエスト・メソッド、HTTP/2のプリファレンス、NEVERのリダイレクション・ポリシー、「デフォルト・プロキシ・セレクタ」、および「デフォルトのSSLコンテキスト」があります。

実行結果
(GET https://opendata.corona.go.jp/api/Covid19JapanAll?dataName=東京都&date=20230228) 200
{"errorInfo":{"errorFlag":"0","errorCode":null,"errorMessage":null},
"itemList":[
    {"date":"2023-02-28",
    "name_jp":"東京都",
    "npatients":"4316448"}
]}

HttpResponse.BodyHandlers.ofString()としたため
res.body()String型で返ってくる。
そのままjsonにキャストしたりはできない。

修飾子と型 メソッド 説明
T body() 本文を返します。

jsonを使った取り出し方

json形式で読み込むために外部ライブラリを使う。

追加する。

Corona.java
import org.json.JSONArray;
import org.json.JSONObject;

JSONObject jsonObject = new JSONObject(res.body());
JSONArray itemList = jsonObject.getJSONArray("itemList");
JSONObject data = itemList.getJSONObject(0);
int nPatients = data.getInt("npatients");
System.out.println(nPatients);

欲しい値がjson,配列,intなのかを見極めながら取り出す。

実行結果
4316448

こんなにいたのか。

次の記事

レスポンスが写真とかGIFの場合に、自動で表示したり保存したりするところまで書きました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0