Consuming a RESTful Web Service


f:id:Naotsugu:20150110034558p:plain

Getting Started · Consuming a RESTful Web Service

このガイドではRESTful Web サービスを利用するアプリケーションの作成をしていきます。

What you’ll build

Spring の RestTemplate を使い、次のような Facebook の Graph API で企業ページのデータを取得していきます。

http://graph.facebook.com/pivotalsoftware

What you’ll need

How to complete this guide

以下から雛形をダウンロードできます。

git clone https://github.com/spring-guides/gs-consuming-rest.git

が、ここではスクラッチで Gradle 使って進めることにします。

Build with Gradle

プロジェクト用のディレクトリを用意して、その中にソースディレクトリ作成します。

mkdir -p src/main/java/hello

build.gradle 作成していきます。

touch build.gradle

内容は以下。

buildscript {
    repositories {
        maven { url "https://repo.spring.io/libs-release" }
        mavenLocal()
        mavenCentral()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:1.1.10.RELEASE")
    }
}

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'idea'
apply plugin: 'spring-boot'

jar {
    baseName = 'gs-consuming-rest'
    version =  '0.1.0'
}

repositories {
    mavenLocal()
    mavenCentral()
    maven { url "https://repo.spring.io/libs-release" }
}

dependencies {
    compile("org.springframework.boot:spring-boot-starter")
    compile("org.springframework:spring-web")
    compile("com.fasterxml.jackson.core:jackson-databind")
    testCompile("junit:junit")
}

task wrapper(type: Wrapper) {
    gradleVersion = '1.11'
}

spring−web と jackson の依存を追加しています。

Fetch a REST resource

プロジェクトの準備が整ったら、RESTful サービスを利用する簡単なアプリケーションの作成に取りかかれます。

Pivotal について知りたいとして、"pivotalsoftware" のIDで Facebook の Graph API を以下のURLで呼び出せば良いです。

http://graph.facebook.com/pivotalsoftware

URL でリクエストすると、以下のような JSON ドキュメントが得られます。

{
   "id": "161112704050757",
   "about": "Pivotal is enabling the creation of modern software applications that leverage big & fast data \u2013 on a single, cloud independent platform.",
   "link": "https://www.facebook.com/pivotalsoftware",
   "location": {
      "city": "San Francisco",
      "country": "United States",
      "latitude": 37.78199,
      "longitude": -122.40406,
      "state": "CA",
      "street": "875 Howard St",
      "zip": "94103"
   },
  ・・・略
   "name": "Pivotal",
   "phone": "(650) 286-8012",
   "talking_about_count": 84,
   "username": "pivotalsoftware",
   "website": "http://www.pivotal.io",
   "were_here_count": 79
}

Spring は、REST web サービスの利用に便利な RestTemplate を提供しています。 RestTemplate を使うと、RESTful サービスを介した処理を1行で書くことができ、ドメインタイプへのバインディングも可能です。

最初にドメインクラスを作りましょう。Pivotal の name, phone number, website URL を Page としてクラスファイルを作成し、

touch src/main/java/hello/Page.java

以下のようにします。

package hello;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;

@JsonIgnoreProperties(ignoreUnknown = true)
public class Page {

    private String name;
    private String about;
    private String phone;
    private String website;

    public String getName() {
        return name;
    }

    public String getAbout() {
        return about;
    }

    public String getPhone() {
        return phone;
    }

    public String getWebsite() {
        return website;
    }

}

単純な Java クラスで、プロパティのアクセス用に getter を定義しています。 クラスは @JsonIgnoreProperties でアノテートし、Jackson に未知のプロパティはJSONからでシリアライズする時に無視するようにしています。

Make the application executable

外部のアプリケーションサーバにデプロイするために、伝統的な WAR としてサービスをパッケージすることもできますが、ここではスタンドアロンアプリケーションを作成するアプローチで進めます。

古き良き Java main() メソッドで起動できる全部入りのの実行可能 JAR へパッケージします。 Spring がサポートする組み込みの Tomcat サーバを HTTP ランタイムとして使うことで、外部インスタンスへのデプロイ無くアプリケーションが実行できるようになります。

Application クラスを作成します。

touch src/main/java/hello/Application.java

Application クラスは以下のようになり、RestTemplate を使い Page オブジェクトを取得します。

package hello;

import org.springframework.web.client.RestTemplate;

public class Application {

    public static void main(String args[]) {

        RestTemplate restTemplate = new RestTemplate();
        Page page = restTemplate.getForObject(
            "http://graph.facebook.com/pivotalsoftware", 
            Page.class);

        System.out.println("Name:    " + page.getName());
        System.out.println("About:   " + page.getAbout());
        System.out.println("Phone:   " + page.getPhone());
        System.out.println("Website: " + page.getWebsite());
    }

}

Jackson JSON processing library がクラスパスにあるので、RestTemplateJSON からのでシリアライズに Jackson を使い、Page オブジェクトに設定します。

ここでは RestTemplate は HTTP GET リクエストを処理しますが、POSTやPUT、DELETE ももちろんサポートしています。

Build an executable JAR

Gradle を使っているなら、アプリケーションの実行は ./gradlew bootRun とするだけです。

実行可能 jar を作成するには以下のようにし(初回のみgradle wrapperが必要)、

./gradlew build

jar を実行すればアプリケーションが起動します。

java -jar build/libs/gs-consuming-rest-0.1.0.jar

実行すると以下のような出力が得られるでしょう。

Name:    Pivotal
About:   At Pivotal, our mission is to enable customers to build a new class of applications, leveraging big and fast data, and do all of this with the power of cloud independence.
Phone:   650-286-8012
Website: http://www.gopivotal.com