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