強力な RESTful API の構築: @RestController と @Controller の比較と応用
序文
Web を閲覧したり API を呼び出したりするときに、バックグラウンドでどのようにリクエストが処理され、レスポンスが生成されるか考えたことはありますか? これは Spring MVC のタスクです。
@RestController
このブログでは、Spring MVC の素晴らしい世界を紹介し、動作原理と 、@Controller
およびアノテーションの使用法を詳しく説明します@ResponseBody
。初心者でも経験豊富な開発者でも、この記事は強力な Web アプリケーションと RESTful API を構築するのに役立つ明確なガイドラインを提供します。
RESTful APIとは
RESTful API (Representational State Transfer API) は、REST アーキテクチャ スタイルに基づいたアプリケーション プログラミング インターフェイスです。これは、Web アプリケーションをよりシンプル、スケーラブル、そして理解しやすくすることを目的とした設計哲学です。RESTful API の中心的な考え方は、リソースを中心的な概念として使用し、標準の HTTP メソッドを通じてリソースを操作することです。
RESTful API の主な機能と概念は次のとおりです。
-
リソース: RESTful API では、すべてがリソースです。リソースは、ユーザー、製品、注文などの実際のデータ オブジェクトまたは仮想概念です。各リソースには一意の識別子 (通常は URL) があります。
-
HTTP メソッド: RESTful API は、標準の HTTP メソッドを使用して操作を実行します。最も一般的に使用される HTTP メソッドには次のものがあります。
- GET : リソースに関する情報を取得するために使用されます。
- POST : 新しいリソースの作成に使用されます。
- PUT : 既存のリソースを更新するために使用されます。
- DELETE : リソースを削除するために使用されます。
-
ステートレス性: RESTful API はステートレスであり、各リクエストには、サーバーが以前のリクエストのステータスに依存せずにリクエストを理解して処理するのに十分な情報が含まれています。これにより、API 設計がよりシンプルかつスケーラブルになります。
-
リソース識別子としての URL : 各リソースは一意の URL 識別子によって表されます。URL を通じて、クライアントはリソースにアクセスし、操作できます。
-
HTTP ステータス コードの使用: HTTP ステータス コードは、リクエストの成功または失敗、および失敗の理由を示すために使用されます。一般的なステータス コードには、200 (成功)、201 (作成)、404 (見つからない)、500 (サーバー エラー) などがあります。
-
データ形式: RESTful API は通常、JSON や XML などの標準データ形式を使用してデータを渡します。これらの形式は、解析と生成が容易でありながら、可読性が優れています。
-
状態を保存する必要がない (ステートレス) : RESTful API は、クライアントの状態情報をサーバー側に保存する必要がありません。各リクエストには、サーバーがリクエストを理解して処理できるように十分な情報が含まれている必要があります。
-
スケーラビリティ: RESTful API はステートレスでリソース指向の性質があるため、一般に優れたスケーラビリティを備えており、高負荷や大規模な使用を処理できます。
-
セキュリティ: RESTful API は、標準の HTTP セキュリティ メカニズム (HTTPS など) を使用して通信を保護し、認証および認可メカニズムを使用してリソースへのアクセスを制限できます。
要約すると、RESTful API は、HTTP プロトコルと REST 原則を使用して設計および構築された API です。その目標は、Web サービスをよりシンプルにし、理解しやすく、スケーラブルにすることです。RESTful API は、広範な採用と標準化により、最新の Web アプリケーションやモバイル アプリケーションを構築するための一般的な方法になりました。
@RestController、@Controller、@ResponseBody
@RestController、@Controller、および @ResponseBody は、RESTful Web アプリケーションを構築するために Spring フレームワークで一般的に使用されるアノテーションです。それらの使用法と意味については、以下で詳しく説明します。
1.@Controller
注:
- 意味:
@Controller
アノテーションは、Spring MVC でクラスをコントローラーとして識別するために使用されます。コントローラーは、クライアントのリクエストを処理し、リクエストされた情報に基づいて対応するメソッドを呼び出してリクエストを処理し、応答を生成する責任があります。 - 使用法: このクラスがコントローラーであることを示すには、このアノテーションをクラスの前に配置する必要があります。通常、メソッド レベルで追加のアノテーションを使用して、特定のリクエストの処理に使用するメソッドを指定することも必要になります。
2.@RestController
注:
- 意味:
@RestController
アノテーションは@Controller
の特殊バージョンであり、@Controller
の機能を組み合わせたものです@ResponseBody
。つまり、このクラスの各メソッドはビューの代わりにオブジェクトを返し、これらのオブジェクトは自動的に JSON または XML にシリアル化されてクライアントに送信されます。 - 使用法:
@Controller
と同様に、このアノテーションをクラスの前に配置して、このクラスが REST コントローラーであることを示す必要があります。その後、@RequestMapping
メソッド レベルで etc アノテーションを使用して、さまざまな HTTP リクエストを処理するメソッドを指定できます。
3.@ResponseBody
注:
- 意味:
@ResponseBody
アノテーションは、メソッドの戻り値をビューに解析するのではなく、HTTP 応答本文に直接書き込む必要があることを示すために使用されます。これは通常、JSON、XML、またはその他のデータ形式で応答を返すために使用されます。 - 使用法:
@ResponseBody
メソッドの前に注釈を配置して、このメソッドの戻り値が HTTP 応答のコンテンツとして直接使用されることを示すことができます。通常、メソッドで etc アノテーションを使用して、@RequestMapping
リクエストされた URL と HTTP メソッドを指定する必要があります。
例
非thymeleafの実装例
Spring コントローラーでこれらのアノテーションを使用する方法を示す例を次に示します。
@RestController
@RequestMapping("/api")
public class MyRestController {
@GetMapping("/hello")
public String sayHello() {
return "Hello, World!";
}
@PostMapping("/add")
public ResponseEntity<String> addData(@RequestBody DataObject data) {
// 处理请求并返回响应
return ResponseEntity.ok("Data added successfully");
}
}
上記の例では、@RestController
アノテーションはMyRestController
REST コントローラーを示し、@GetMapping
アノテーション@PostMapping
はさまざまな HTTP リクエスト処理メソッドを指定し、@ResponseBody
アノテーションは HTTP 応答本文に直接書き込まれたデータを返すために使用されます。同時に、@RequestMapping
アノテーションは URL マッピング パスを定義します。
thymeleaf の実装例
次に、Thymeleaf と組み合わせた例を作成してみましょう。
まず、Thymeleaf テンプレート エンジンがプロジェクトで構成されていることを確認します。次に、次のように Spring MVC コントローラーを作成します。
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class MyController {
@GetMapping("/hello")
public String sayHello(Model model) {
model.addAttribute("message", "Hello, World!");
return "hello"; // 这里返回的是Thymeleaf模板的名称
}
}
上記の例では、@Controller
アノテーションはMyController
クラスをコントローラーとして識別し、GET リクエストをパスに@GetMapping("/hello")
マップします。このメソッド/hello
では、オブジェクトを使用してデータをビューに渡します。sayHello
Model
次に、Thymeleaf テンプレートを作成し、テンプレート ファイルの名前をhello.html
と仮定し、適切なテンプレート ディレクトリに配置します。
<!DOCTYPE html>
<html>
<head>
<title>Hello Page</title>
</head>
<body>
<h1 th:text="${message}"></h1>
</body>
</html>
このテンプレートでは、Thymeleaf の構文を使用して、コントローラーから渡されたメッセージをレンダリングします。
最後に、Thymeleaf のテンプレート パーサー構成を含め、Spring 構成が正しいことを確認します。このようにして、ユーザーが/hello
パスにアクセスすると、Spring MVC はsayHello
メソッドを呼び出し、Thymeleaf テンプレートをレンダリングし、メッセージをテンプレートに渡します。
この例では、Spring MVC アノテーションと Thymeleaf テンプレート エンジンを組み合わせて、単純な Web アプリケーションを作成する方法を示します。プロジェクトのニーズに応じて構成および拡張するようにしてください。