
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 がクラスパスにあるので、RestTemplate は JSON からのでシリアライズに 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