REST(表現型状態転送)
- ネットワーク リソースを表す場合は、と を
使用する2 つの方法を使用できます。查询id为1的用户信息
保存用户信息举例
- 伝統的なスタイルのリソース説明フォーム
- http://localhost/user/getById?id=1
- http://localhost/user/saveUser
- RESTスタイル記述フォーム
- http://localhost/user/1
- http://ローカルホスト/ユーザー
従来の方法では、1 つのリクエスト URL に 1 つの操作が対応していましたが、リクエスト URL のアドレスを読み取ることで、その URL がどのような操作を実行しているか大まかに知ることができるため、これは面倒なだけでなく安全でもありません。REST 形式の記述では、リクエストアドレスがシンプルになり、リクエスト URL を見ただけではその URL の具体的な機能が推測できなくなりますが、まとめると以下の 2 つのメリットしかありません。
- リソースへのアクセス動作が隠蔽されているため、アドレスからリソースに対してどのような操作が行われているかを知ることはできません。
- 書き方の簡略化
同じ URL アドレスが追加、変更、またはクエリされる可能性があるのに、リクエストが何であるかをどのように区別すればよいのかという新たな問題が生じます。
- REST スタイルでリソースにアクセスする場合に使用します行動リソースに対してどのような操作が実行されるかを区別する
http://localhost/users
全ユーザー情報の問い合わせ GET(クエリ)http://localhost/users/1
指定したユーザー情報をクエリGET(クエリ)http://localhost/users
ユーザー情報追加POST(追加・保存)http://localhost/users
ユーザー情報変更PUT(変更・更新)http://localhost/users/1
ユーザー情報の削除 DELETE(削除)
リクエストにはさまざまな方法がありますが、一般的に使用される方法は 4 つあります。つまり、GET
: クエリ、POST
: 追加、PUT
: 変更、DELETE
: 削除です。
注意注意注意注意
- 上記の動作は合意された方法であり、合意は仕様ではなく破られる可能性があるため、REST仕様ではなくRESTスタイルと呼ばれます。
- REST は対応するアーキテクチャを提供しており、このアーキテクチャに従ってプロジェクトを設計すると、開発の複雑さが軽減され、システムのスケーラビリティが向上します。
- REST では、GET/POST/PUT/DELETE がクエリ/追加/変更/削除を目的としていると規定されていますが、削除に GET リクエストを使用する必要がある場合、これはプログラムを実行することで実現できます。
- しかし、ほとんどの人がこのスタイルに従っている場合、作成するコードは他の人が読むと少し不可解なものになるでしょう。
- 説明モジュールの名前は通常、複数形、つまり を追加する形式で記述され、ユーザー、書籍、アカウントなど、単一のリソースではなくリソースを示します。
REST スタイルが何であるかがわかったので、次は新しい概念を紹介しますRESTful
。RESTスタイルに従ってリソースにアクセスすることは、と呼ばれます。RESTful。
リクエストを比較します。1 つはページの URL パスに配置され、もう 1 つはいくつかのリクエスト パラメータ メソッドを使用して変更されます。
名前 | @PathVariable |
---|---|
タイプ | 仮パラメータのアノテーション |
位置 | SpringMVCコントローラーメソッドパラメータ定義前 |
効果 | バインディング パス パラメーターとプロセッサ メソッド パラメーター間の関係には、パス パラメーター名と形式パラメーター名が 1 対 1 で対応する必要があります。 |
パラメータの受け取りに関しては、 、 、 の 3 つのアノテーションが付いてい@RequestBody
ます@RequestParam
。@PathVariable
- 違い
- @RequestParam は URL アドレスまたはフォームパラメータを受け取るために使用されます
- @RequestBody は json データを受信するために使用されます
- @PathVariable はパス パラメータを受け取るために使用され、{パラメータ名} を使用してパス パラメータを記述します
- 応用
- 開発後半では、複数のリクエストパラメータを送信する場合、json形式が主流となり、@RequestBodyが広く使用されます。
- 非 JSON 形式でデータを送信する場合は、 @RequestParam を使用してリクエスト パラメーターを受け取ります
- 開発には RESTful を使用します。パラメータの数が 1 など少ない場合、@PathVariable を使用してリクエスト パス変数を受け取ることができます。これは通常、ID 値を渡すために使用されます。
実際、REST スタイルの実際の開発はそれほど面倒ではありません。例を見てみましょう。
package com.taro.controller;
import com.taro.domain.Book;
import org.springframework.web.bind.annotation.*;
//@Controller
//@ResponseBody配置在类上可以简化配置,表示设置当前每个方法的返回值都作为响应体
//@ResponseBody
@RestController //使用@RestController注解替换@Controller与@ResponseBody注解,简化书写
@RequestMapping("/books")
public class BookController {
// @RequestMapping( method = RequestMethod.POST)
@PostMapping //使用@PostMapping简化Post请求方法对应的映射配置
public String save(@RequestBody Book book){
System.out.println("book save..." + book);
return "{'module':'book save'}";
}
// @RequestMapping(value = "/{id}" ,method = RequestMethod.DELETE)
@DeleteMapping("/{id}") //使用@DeleteMapping简化DELETE请求方法对应的映射配置
public String delete(@PathVariable Integer id){
System.out.println("book delete..." + id);
return "{'module':'book delete'}";
}
// @RequestMapping(method = RequestMethod.PUT)
@PutMapping //使用@PutMapping简化Put请求方法对应的映射配置
public String update(@RequestBody Book book){
System.out.println("book update..."+book);
return "{'module':'book update'}";
}
// @RequestMapping(value = "/{id}" ,method = RequestMethod.GET)
@GetMapping("/{id}") //使用@GetMapping简化GET请求方法对应的映射配置
public String getById(@PathVariable Integer id){
System.out.println("book getById..."+id);
return "{'module':'book getById'}";
}
// @RequestMapping(method = RequestMethod.GET)
@GetMapping //使用@GetMapping简化GET请求方法对应的映射配置
public String getAll(){
System.out.println("book getAll...");
return "{'module':'book getAll'}";
}
}
名前 | @RestController |
---|---|
タイプ | クラスアノテーション |
位置 | SpringMVCをベースにしたRESTful開発のコントローラークラス定義の上 |
効果 | 現在のコントローラー クラスを RESTful スタイルに設定します。 これは、@Controller アノテーションと @ResponseBody アノテーションの組み合わせと同等です。 |
名前 | @GetMapping @PostMapping @PutMapping @DeleteMapping |
---|---|
タイプ | メソッドのアノテーション |
位置 | コントローラーメソッド定義上の SpringMVC ベースの RESTful 開発 |
効果 | 現在のコントローラー メソッドのリクエスト アクセス パスとリクエスト アクションを設定します。それぞれリクエスト アクションに対応します。 たとえば、@GetMapping は GET リクエストに対応します。 |
関連する属性 | 値 (デフォルト): リクエストのアクセスパス |