Ratpack入門 (2) - アーキテクチャー

## Ratpack入門シリーズ

1. [Ratpack入門 (1) - Ratpackとは](https://qiita.com/minebreaker/items/d7eeca815872a97069f5)
2. [Ratpack入門 (2) - アーキテクチャー](https://qiita.com/minebreaker/items/a9b256fd8a1513104669)
3. [Ratpack入門 (3) - hello world 詳解](https://qiita.com/minebreaker/items/b26d7d0677f91f17a7b5)
4. [Ratpack入門 (4) - ルーティング & 静的コンテンツ](https://qiita.com/minebreaker/items/8f26d8350f936ad669c2)
5. [Ratpack入門 (5) - Json & Registry](https://qiita.com/minebreaker/items/4353611cc541e3cb35fb)
6. [Ratpack入門 (6) - Promise](https://qiita.com/minebreaker/items/4689058d0d7b34d99c74)
7. [Ratpack入門 (7) - Guice & Spring](https://qiita.com/minebreaker/items/52b303bc18db5b33bd68)
8. [Ratpack入門 (8) - セッション](https://qiita.com/minebreaker/items/1ebaa492b257365e1e5e)
9. [Ratpack入門 (9) - Thymeleaf](https://qiita.com/minebreaker/items/50693a4d6614979f654c)


## Ratpackのアーキテクチャー

ここではRatpackの主要なクラスの概略を解説していきます。随時追記予定。


## [`RatpackServer`](https://ratpack.io/manual/current/api/ratpack/server/RatpackServer.html)

サーバーを起動するための基本的なクラスです。


## [`ServerConfig`](https://ratpack.io/manual/current/api/ratpack/server/ServerConfig.html)

サーバーに関する設定(ポートなど)をまとめるクラスです。


## [`Service`](https://ratpack.io/manual/current/api/ratpack/service/Service.html)

Ratpackサーバーのライフサイクルにおけるフックを提供するインターフェースです。
`@Deprecated`されている同名インターフェースがあるので注意。


## [`Registry`](https://ratpack.io/manual/current/api/ratpack/registry/Registry.html)

Handler間で情報の受け渡しに使用されるクラスです。
...こう書くとあまり重要でないように見えますが、サーバー自体も`Registry`を通して各依存関係を取得します(公式マニュアルでは`server registry`)。
従って、Handler自身やRendererといった各機能は全てRegistryを通して取得されるので、Ratpackの柔軟性を支える大切なクラスです。

[Google Guice](https://github.com/google/guice)を使用した[拡張](https://ratpack.io/manual/current/guice.html)が用意されています。


## [`Action`](https://ratpack.io/manual/current/api/ratpack/func/Action.html)

設定などを行うための汎用の関数型インターフェースです。
例えば`RatpackServer.start()`は`Action<RatpackServerSpec>`を引数にとりますし、`RatpackServerSpec.handlers()`は`Action<Chain>`を引数に持ちます。


## [`Chain`](https://ratpack.io/manual/current/api/ratpack/handling/Chain.html)

複数のハンドラーをひとまとめにするクラスです。
各ハンドラーのルーティングなども行います。


## [`Handler`](https://ratpack.io/manual/current/api/ratpack/handling/Handler.html)

あるリクエストを受け取りレスポンスを返すことをモデル化した、`handle(Context)`メソッドをもつ関数型インターフェースです。
イメージとしてはJava EEの`HttpServlet`のようなものでしょうか。
渡された`Context`に処理を記述していくことで、レスポンスを作成していきます。


## [`Context`](https://ratpack.io/manual/current/api/ratpack/handling/Context.html)

各`Handler`の呼び出しに伴う「文脈」を提供するクラスです。
HTTPリクエストなどの情報も、このオブジェクトが保持しています。
`Context.render(Object)`を呼び出すことで、返却するレスポンスの中身が作成されます。


## [`Promise`](https://ratpack.io/manual/current/api/ratpack/exec/Promise.html)

非同期処理をサポートするクラスです。JavaScriptのPromiseと同じようなもの。詳細解説記事を作成予定。


## [`Operation`](https://ratpack.io/manual/current/api/ratpack/exec/Operation.html)

`Promise`の値を返却しないバージョンです。


## [`Blocking`](https://ratpack.io/manual/current/api/ratpack/exec/Blocking.html)

`Promise`や`Operation`を作成するためのユーティリティークラスです。ブロッキングIOをするときに使用します。


## [`Session`](https://ratpack.io/manual/current/api/ratpack/session/Session.html)

`ratpack-session`が必要です。Ratpackの通信でセッションをサポートするためのクラスです。
`Registry.get()`から取得します。

## [`BaseDir`](https://ratpack.io/manual/current/api/ratpack/server/BaseDir.html)
静的アセットを提供するのに使用するクラスです。