Springフレームワークでは、通常のコントローラーとRESTコントローラーを使って異なるアプローチでWebアプリケーションを構築することができます。以下では、それぞれの違いと使い方について解説します。
通常のコントローラーとThymeleaf
通常のコントローラーは、HTMLテンプレートを生成し、サーバーサイドでレンダリングしてクライアントに送信するのに適しています。主に以下のような特徴があります:
- ビューレンダリング: ThymeleafやJSPなどのテンプレートエンジンを使用してHTMLを生成し、ユーザーに表示します。
- フォーム処理: ユーザーの入力を受け取り、サーバーサイドで処理し、結果をHTMLとしてレスポンスします。
- セッション管理: セッションを使用してユーザーの状態を管理し、各リクエスト間で情報を保持します。
例えば、次のようにコントローラーを定義してThymeleafでビューを生成します:
@Controller
public class WebController {
@GetMapping("/home")
public String home(Model model) {
model.addAttribute("message", "Hello, Thymeleaf!");
return "home"; // home.htmlをレンダリング
}
}
RESTコントローラーとReact
RESTコントローラーは、JSONやXMLなどのデータフォーマットでクライアントと通信するAPIを提供するのに適しています。主に以下のような特徴があります:
- データの提供: JSONやXML形式でデータをクライアントに提供します。通常、クライアントはこのデータを受け取って動的に表示を更新します。
- フロントエンドの分離: クライアント側(例えばReact)はフロントエンドを担当し、バックエンドのAPIを呼び出してデータを取得・更新します。
- 状態の非保存: サーバー側ではセッションを保持せず、状態は主にクライアント側で管理します。
例えば、次のようにRESTコントローラーを定義してJSONデータを提供します:
@RestController
@RequestMapping("/api")
public class ApiController {
@GetMapping("/data")
public ResponseEntity<String> getData() {
String jsonData = "{\"message\": \"Hello, React!\"}";
return ResponseEntity.ok().body(jsonData);
}
}
RESTとAPI
RESTは、Representational State Transferの略で、HTTPプロトコルを使用してリソースの表現を操作するためのアーキテクチャスタイルです。APIは、このRESTfulなアーキテクチャを使用してエンドポイントを提供し、クライアントがリクエストを送信しデータを受け取る仕組みです。