技術記事については、Qiitaにも稀に投稿しています。

NetBeansとJavaEEで、ポケモンの日英仏独韓の名前を返すRESTなAPIを開発してみた - 準備編 -

catToFish

JavaEEとは?RESTとは?みたいなレベルの筆者が勉強がてらやったみた内容です。せっかく作るなら興味のある内容にしようと思い、題材をポケモンにしてみました。

今回の開発環境は以下の通り。

項目 内容
PC(OS) Mac OS X El Capitan(10.11.3)
統合開発環境(IDE) NetBeans IDE 8.1
Java(JDK) 1.7.0_25
DataBase MySQL 5.7.11

今回のAPI開発について

使用したデータ

別途、こちらからローカルのデータベースに簡易なポケモン図鑑を作りました。図鑑番号順に、日本語名、英語名、ドイツ語名、フランス語名、韓国語名を持ったデータベースです。(使ったSQL等は割愛)

mysql> select * from pkmn_base;
+--------+--------------------+------------+------------+--------------+--------------------+---------------------+---------------------+
| number | jp_name            | en_name    | ge_name    | fr_name      | kr_name            | created_datetime    | updated_datetime    |
+--------+--------------------+------------+------------+--------------+--------------------+---------------------+---------------------+
|      1 | フシギダネ         | Bulbasaur  | Bisasam    | Bulbizarre   | 이상해씨           | 2016-04-07 23:01:37 | 2016-04-07 23:01:37 |
|      2 | フシギソウ         | Ivysaur    | Bisaknosp  | Herbizarre   | 이상해풀           | 2016-04-07 23:01:37 | 2016-04-07 23:01:37 |
|      3 | フシギバナ         | Venusaur   | Bisaflor   | Florizarre   | 이상해꽃           | 2016-04-07 23:01:37 | 2016-04-07 23:01:37 |
|      4 | ヒトカゲ           | Charmander | Glumanda   | Salameche    | 파이리             | 2016-04-07 23:01:37 | 2016-04-07 23:01:37 |
|      5 | リザード           | Charmeleon | Glutexo    | Reptincel    | 리자드             | 2016-04-07 23:01:37 | 2016-04-07 23:01:37 |
|      6 | リザードン         | Charizard  | Glurak     | Dracaufeu    | 리자몽             | 2016-04-07 23:01:37 | 2016-04-07 23:01:37 |
|      7 | ゼニガメ           | Squirtle   | Schiggy    | Carapuce     | 꼬부기             | 2016-04-07 23:01:37 | 2016-04-07 23:01:37 |
|      8 | カメール           | Wartortle  | Schillok   | Carabaffe    | 어니부기           | 2016-04-07 23:01:37 | 2016-04-07 23:01:37 |
|      9 | カメックス         | Blastoise  | Turtok     | Tortank      | 거북왕             | 2016-04-07 23:01:37 | 2016-04-07 23:01:37 |
|     10 | キャタピー         | Caterpie   | Raupy      | Chenipan     | 캐터피             | 2016-04-07 23:01:37 | 2016-04-07 23:01:37 |
|     11 | トランセル         | Metapod    | Safcon     | Chrysacier   | 단데기             | 2016-04-07 23:01:37 | 2016-04-07 23:01:37 |
|     12 | バタフリー         | Butterfree | Smettbo    | Papilusion   | 버터플             | 2016-04-07 23:01:37 | 2016-04-07 23:01:37 |
以下略

完成したAPIをブラウザで叩いた結果

JSON形式で返却するAPIにしたので(※JSONPではない)、以下のようにずらーっと並びます。ちなみに、執筆時点ではフシギダネからボルケニオンまで721種類います。

api_result

整形すると、こんな感じ。

[
    {
        "en_name": "Bulbasaur", 
        "fr_name": "Bulbizarre", 
        "ge_name": "Bisasam", 
        "jp_name": "フシギダネ", 
        "kr_name": "이상해씨", 
        "number": 1
    }, 
    {
        "en_name": "Ivysaur", 
        "fr_name": "Herbizarre", 
        "ge_name": "Bisaknosp", 
        "jp_name": "フシギソウ", 
        "kr_name": "이상해풀", 
        "number": 2
    }, 
    {
        "en_name": "Venusaur", 
        "fr_name": "Florizarre", 
        "ge_name": "Bisaflor", 
        "jp_name": "フシギバナ", 
        "kr_name": "이상해꽃", 
        "number": 3
    },

早速開発してみる

プロジェクトの作成

今回はNetBeans上にプロジェクトを作っていきます。(ファイル -> 新規プロジェクト)

startNetBeans

カテゴリ「Maven」から「Webアプリケーション」を選択します。(後々の拡張性を考えて、一応Mavenを採用しました)

newPrj_1

今回のプロジェクトの名前は、「pkmnAPI」とし、その他のサーバやJavaEEのバージョンはデフォルトのままでいきます。

newPrj_2

newPrj_3

以下は既に完成されたAPIの状態なので、プロジェクトの作成直後の状態ではないのですが、概ねこのようなプロジェクトが生成されます。

(たぶん、プロジェクト作成直後はRESTful Webサービス、テスト・パッケージ、生成されたソースとかはないはず)

newPrj_4

パッケージ/クラスの作成

プロジェクトの「ソース・パッケージ」を右クリックし、新規→Javaクラスを選択、「クラス名」「パッケージ」を入力し、いくつかのパッケージとクラスを作成します。

newClass_1

今回作成したクラス群

パッケージ / クラス名 用途
.pkmn.api
PkmnBaseApi.java
API本体のクラス。リクエストを受け取り、適切なLogicを呼び出し、値を返却する。
.pkmn.logic
PkmnBaseLogic.java
データの処理を行うクラス。APIからの呼び出しで、必要に応じてDAOを呼び出す。
.pkmn.dao
PkmnBaseDao.java
DB操作を行うクラス。Logicからの呼び出しでDBの値を取得・更新・削除する。
.pkmn.entity
PkmnBaseEntity.java
データ管理用のクラス。DBのレコードに対応している。

パッケージは以下の通り

newClass_2

というわけで-準備編-はここまで。次回は用意したクラス群にソースコードを書いて、APIを実装していきます。

“実装編”へ続く