Java Spark
ブログを書く時間をうまく確保できてない mmts1007 です。
今回は Java のフレームワーク Spark について書きます。
Java Spark とは
Spark は Java の Web アプリケーションフレームワークです。
Ruby のフレームワーク Sinatra にインスパイアされたフレームワークです。
Java 8 で追加になった ラムダ式 を使うことでシンプルに記述することができます。
特徴
特徴としては前述のとおり
です。
サンプル
Hello Spark
とてもシンプルな例です
ルーティング
Sinatra は HTTP メソッドと URLを元にルーティングを決定します。
Spark は Sinatra にインスパイアされたため、Spark も同様にHTTP メソッドと URLを元にルーティングを決定します。
上記の例だと HTTP メソッド:GET、URL:"/" にリクエストした場合、上記のメソッドが実行されることになります。
シンプルな処理内容の記述
Spark はラムダ式を使用することで、シンプルに記述することができます。
get("URLパス", "処理内容");
となっており、第 2 引数にラムダ式を渡すことができます。
これにより、実際の処理内容をシンプルに記述することが可能となりました。
組み込みサーバ
今までの Web アプリケーションは war ファイルを作成し、それを Tomcat などのアプリケーションサーバにデプロイするのが主流でしたが今は組み込みサーバが流行っています。
サーバが組み込まれていると java -jar xxxx.jar
のように Java コマンドで実行するだけでサーバが起動します。
アプリケーションサーバを用意しなくとも Web アプリケーションが実行できるのはとても楽です。
Rest API
REST API のサンプルとしてタスクの取得/登録/更新/削除のソースの書き方のイメージです。
public class TaskSpark { public static void main(String[] args) { get("/tasks", (req, res) -> { // 1. タスク内容を全て戻す }); get("/tasks/:id", (req, res) -> { // 2. id に指定されたタスクを戻す }); post("/tasks", (req, res) -> { // 3. パラメータに指定された内容でタスクを作成する }); put("/tasks/:id", (req, res) -> { // 4. パラメータに指定された内容で id のタスクを更新する }); delete("/tasks/:id", (req, res) -> { // 5. id に指定されたタスクを削除する }); } }
Sinatra ライクな記述のため、どのようなルーティングなのか分かりやすいです。
get の /tasks のリクエストがきたら 1. が実行される といった形です。
上記のソースのように REST API のような HTTP のメソッドに意味を持たせる場合、分かりやすいフレームワークだと思います。
実際に処理を書いたサンプルが下記のとおりです。
※ DB 処理を書くのが面倒だったので、適当にメモリに保持。ここら辺の記述は適当ですw
new JsonTransformer()
を 引数に与えることで、戻りの型を変換することができます。これは Spark の機能です。
今回は JSON 型に変換したかったので JsonTransformer
クラスを作成し、指定しています。
まとめ
Sinatra ライクな Spark についての紹介でした。
といった Spark の特徴が少しでも分かって頂ければと思います。