[Java]Unirestで簡単HTTP操作[REST]

2013.05.07

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

Httpライブラリ、Unirest

Unirestとは、lightweightなHttpライブラリです。
以前「unicorn」という名前で開発されていたようですが、先日「Unirest」と名前を変えてリリースされたようです。
シンプルなコードでHttp操作やファイルアップロードができ、Javaのみでなく、PHPやRuby等でも使用することができます。
非常に簡単に使用することができるので、試してみましょう。

環境構築方法

今回使用した動作環境は以下のとおりです。ビルドにMavenを使用するので、インストールしておきましょう。

  • OS : MacOS X 10.7.5
  • Java : 1.7.0_17
  • Maven : 3.0.3

Unirestをインストールして動かす

1.Mavenプロジェクト作成

公式サイトを見ると、Mavenを使用する方法が書いてあります。
Mavenを使用してサンプルプロジェクトを作成し、Unirestをインストールしましょう。(面倒ですが。これ、jarで配布してないんでしょうか?)
mvn archetype:createでプロジェクトを作成します。

% mvn archetype:create -DgroupId=com.example -DartifactId=unirest
% cd unirest

2.pox.xmlの編集

Unirestを依存ライブラリに追加するため、unirest/pom.xmlを編集します。
Unirest用repositoryの追加、Unirest(と、それに付随する各種jar)を追加してください。

・
・
<repositories>
<repository>
    <id>mashape-releases</id>
    <url>http://maven.mashape.com/releases</url>
</repository>
</repositories>

<dependencies>
<dependency>
    <groupId>com.mashape.unirest</groupId>
    <artifactId>unirest</artifactId>
    <version>1.0.0</version>
</dependency>
<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.2.3</version>
</dependency>
<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpmime</artifactId>
    <version>4.2.3</version>
</dependency>
<dependency>
    <groupId>org.json</groupId>
    <artifactId>json</artifactId>
    <version>20090211</version>
</dependency>
</dependencies>
・
・

pom.xmlが編集できたら、ライブラリをインストールしましょう。
このあとJavaファイルを編集しますが、Eclipseを使用する人は、eclipseコマンドでプロジェクトをEclipse化しましょう。

% mvn install
% mvn eclipse:eclipse //Eclipseを使いたい人。これやったらEclipseでインポートしてください

3.プログラムの記述

sample/src/main/java/com/example/App.javaでUnirestを使用してみましょう。
httpbin.org(HTTPクライアントテストサービス)に対してアクセスし、結果をjsonで取得しています。

package com.example;
import java.util.Map;
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.JsonNode;
import com.mashape.unirest.http.Unirest;
import com.mashape.unirest.http.async.Callback;

public class App {
  public static void main(String[] args) {
    HttpResponse<JsonNode> res1 = 
      Unirest.get("http://httpbin.org/user-agent").header("accept",  "application/json").asJson();
      System.out.println(res1.getBody());
  }
}

実行してみるとボディ内容が表示されます。json形式で簡単に習得できるのがわかります。
また、POSTしたい場合はpostメソッドを使うだけです。パラメータを渡したい場合、fieldメソッドをチェーンしてkey-value形式で渡します。

HttpResponse<JsonNode> postRes = 
  Unirest.post("http://httpbin.org/post")
         .header("accept", "application/json")
         .field("parameter", "value")
         .field("foo", "bar")
         .asJson();
System.out.println(postRes.getBody());

非同期で実行することもできます。その場合、Callbackインターフェイスを渡してcomletedメソッドを実装します。

Thread thread = 
    Unirest.post("http://httpbin.org/post")
           .header("accept", "application/json")
           .field("param1", "value1")
           .field("param2", "value2")
           .asJson(new Callback<JsonNode>() {
                public void completed(HttpResponse<JsonNode> response) {
                  int code = response.getCode();
                  Map<String, String> headers = response.getHeaders();
                  JsonNode body = response.getBody();
                  System.out.println(code);
                  System.out.println(headers);
                  System.out.println(body);
                }
    });

まとめ

とても簡単にHttpリクエストを送り、json形式で受け取ることができました。
いろいろな場面で役に立ちそうです。

参考サイトなど