エンジニアになりたい

立派なエンジニアに憧れるへっぽこエンジニアのメモ書き

Play Framework の 簡単サンプルAPI

Play Framework でただ JSON を1つ返すだけの簡単な API サンプルを作ってみます。


1. プロジェクト作成からサーバ立ち上げまで

2. routes 編集

3. モデル作成

4. コントローラ作成


1. プロジェクト作成からサーバ立ち上げ

$ play new sample

sample はプロジェクト名のつもりです。
実行するともう一度名前入力を求められるので
もう一度 名前入れるか 空欄のままで Enter
すると、Java か Scala か聞かれるので僕は Java を選択

次に

$ cd sample
$ play

ディレクトリを作成したプログラムに移動し
play コマンドを実行で play コンソールが使えます。

ちなみに play コンソールで

eclipse

と打つとeclipse のプロジェクトに変換してくれます。

そして

run

でサーバが立ち上がります。
必要なライブラリもダウンロードされます。


2. routes 編集

conf/routes に下記を追加します。

GET    /team                        controllers.Application.get()

見たまんまですが、
/team というパスに GET リクエストを送ると controllers.Application クラスの
get()メソッドが動きますっていう意味です。


3. モデル作成
すごい簡単に作ります。

package models;

import java.util.List;

import com.fasterxml.jackson.annotation.JsonProperty;

public class Team {
	public Team(){}
	public Team(int id, String teamName, List<Member> members) {
		this.id = id;
		this.teamName = teamName;
		this.members = members;
	}

	public int id;
	
	@JsonProperty("team_name")
	public String teamName;
	
	public List<Member> members;
	
	public static class Member {
		public Member(){}
		public Member(String memberName, int age) {
			this.memberName = memberName;
			this.age = age;
		}

		@JsonProperty("member_name")
		public String memberName;
		
		public int age;
	}
}


@JsonProperty アノテーションは JSON で扱う名前を指定します。

@JsonProperty("team_name")
public String teamName;

これで Java の teamName を JSON では team_name としてくれます。


4. コントローラー作成

package controllers;

import java.util.ArrayList;
import java.util.List;

import models.Team;
import models.Team.Member;
import play.libs.Json;
import play.mvc.Controller;
import play.mvc.Result;
import views.html.index;

public class Application extends Controller {

	public static Result index() {
		return ok(index.render("Your new application is ready."));
	}

	public static Result get() {
		List<Member> members = new ArrayList<Member>();
		members.add(new Member("たけし", 24));
		members.add(new Member("さやか", 23));
		members.add(new Member("けんじ", 25));
		Team team = new Team(1, "Aチーム", members);

		return ok(Json.toJson(team));
	}

}

index() はデフォルトであったものです。
僕は get() を足しました。
モデルの Team クラス をインスタンス化して JSON に変換してレスポンスを返します。


Json.toJson(team)

これだけで JSON に変換して Content-Type を application/json;
にしてくれてます。

ok() はステータスを 200 OK にしてレスポンスします。

以上、簡単なサンプルでした。

あと、API を試したいときにはクロームのアプリの
Dev HTTP Client とか Postman とかAdvanced Rest Client とかが使えます。
どれも簡単です。


ちなみに結果はこんな感じです。

{
    "id": 1,
    "members": [
        {
            "age": 24,
            "member_name": "たけし"
        },
        {
            "age": 23,
            "member_name": "さやか"
        },
        {
            "age": 25,
            "member_name": "けんじ"
        }
    ],
    "team_name": "Aチーム"
}

インデントは Postman がつけてくれただけだと思います。