業務でJavaによりWEBAPI(Rsetful API)を作成する機会ががあったのでちょっとメモしておきます。
Contents
RestAPIとは
近年、WEBサービスなどで使われているJavaのAPIは軽量さやシンプルさからRestに基づいて設計されたものが多くなってきています。
Restの特徴として、下記のようなものがあげられます。
- URIによりリソースが特定される
- HTTPメソッドを利用して、リソースを操作
- クライアント、サーバー間はステートレス
リソース・・WEBからアクセスすることのできる1つ1つのファイル(ただのプログラムやテキストファイル)などのこと。
ステートレス・・1回きりの通信でそれまでの通信状態を保持しない状態のこと。対義語はステートフル(セッションに概念が近い)。
凄く単純に言ってしまうとあるURLをたたいた時に何らかのデータを返すサービスのことです。
またJavaにてRestfulAPIを作成する仕様のことをJAX-RSというようです。
プログラムの作成方法について
通常のAPIではデータベースにアクセスをして、その結果を返すということが一般的かと思います。
その場合の書き方です。
環境は
Windows8
Java7
Glassfish 4.1
です。
なお、一部のプログラムが前回の記事と同じです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
package com.person.beans; import com.person.ejb.PersonFacade; import com.person.entity.Person; import java.io.IOException; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.logging.Level; import java.util.logging.Logger; import javax.ejb.EJB; import javax.ejb.Stateless; import javax.ws.rs.GET; import javax.ws.rs.Path; import org.codehaus.jackson.map.ObjectMapper; @Path("ping")//ここはURLの一部になります。 @Stateless//glassgishを使う場合書かないとエラーになります。 public class JavaAPI { @EJB //@Injectだとエラーがでます。 PersonFacade personFacade; /** * @return */ @GET //GETでアクセスする場合このアノテーションが必要です。 public String getAllToJson() { String json = null; try { List<Person> personList = personFacade.findAll(); ObjectMapper objectMapper = new ObjectMapper(); Map<String, List<Person>> personMap = new HashMap<>(); personMap.put("aaData", personList); json = objectMapper.writeValueAsString(personMap); } catch (IOException ex) { Logger.getLogger(PersonBean.class.getName()).log(Level.SEVERE, null, ex); } return json; } } |
またアプリケーションサーバーを起動する場合下記のプログラムも必要になってきます。
1 2 3 4 5 6 7 8 9 |
package com.person.beans; import javax.ws.rs.ApplicationPath; import javax.ws.rs.core.Application; @ApplicationPath("webresources")//この文字もURLの一部になります。 public class ApplicationConfig extends Application{ } |
上記のようなJavaのプログラムを作成し、
http://localhost:8080/プロジェクトファイル名/webresources/ping
と入力すると画面にJSON形式の配列が表示されます。
もちろんパラメータも渡せるようですが、次回以降書かせていただきます。
ちなみに「Javaエンジニア養成読本」を参考にしました。