REST API
REST
Representation State Transfer(REST):転送リソースステータス
ネットワークアーキテクチャの原則
リソースを名前で区切ってステータスを交換
特長
クライアント、サーバ:クライアントとサーバは互いに独立している必要があります.
Stateless:クライアントの状態をサーバに保存せず、リクエストに応答します.
Cache:クライアントはサーバの応答(一時記憶)をキャッシュできる必要があります.
階層化:サーバとクライアントの間、ファイアウォール、ゲートウェイ、Proxyなどの異なる階層が必要であり、拡張が必要です.
インタフェースの一貫性:インタフェースの一貫性を確保し、アーキテクチャを簡素化し、クライアントとサーバが独立して改善できるようにします.
判定基準
1.資源の識別
識別子:100
2.メッセージによるリソースの操作
Webは様々な方法でデータを伝達することができる.
ex) HTML, XML, JSON, TEXT...
HTTPヘッダのデータ型を指定できます.
リソースを処理するためにデータ全体を送信するのではなく、メッセージを転送します.
3.自己叙述的な情報
要求されたデータがどのように処理されるかを決定するために、十分なデータを含める必要があります.
HTTPベースのRESTは、HTTPメソッド、Header情報、URIを含む情報として表すことができる.
REST APIの開発に際しては、クライアント要求のデータのみに応答するのではなく、関連リソースのリンク情報も含めなければならない.
これらの条件が備わっていればREST Fulとして表され、REST APIと呼ばれる.
GET API
使用方法
@PathVariable
変更部分は{}で宣言します.
@PathValibaleをパラメータとして受信できます.
宣言されたurlと同じ名前でパラメータ名を設定する必要があります.default nameをurlと同じ名前で宣言する場合は、他の名前のパラメータを使用できます.
query-paramはurl中?key 1=value 1&key 2=value 2&key 3=value 3の形式で伝達されます.
Map形式で
データ転送オブジェクト(DTO)は層間データ交換のためのオブジェクトであり、DTOは論理を持たない純粋なデータオブジェクト(getter&setterのクラスのみ)
POST API
使用方法
map形式でリクエストを受け入れれば、どんな代価を払っても得ることができるが、この点は不安だ.
PUT API
使用方法
DELETE API
使用方法
Representation State Transfer(REST):転送リソースステータス
ネットワークアーキテクチャの原則
リソースを名前で区切ってステータスを交換
特長
クライアント、サーバ:クライアントとサーバは互いに独立している必要があります.
Stateless:クライアントの状態をサーバに保存せず、リクエストに応答します.
Cache:クライアントはサーバの応答(一時記憶)をキャッシュできる必要があります.
階層化:サーバとクライアントの間、ファイアウォール、ゲートウェイ、Proxyなどの異なる階層が必要であり、拡張が必要です.
インタフェースの一貫性:インタフェースの一貫性を確保し、アーキテクチャを簡素化し、クライアントとサーバが独立して改善できるようにします.
1.資源の識別
http://localohost/user/100
Resource : user識別子:100
2.メッセージによるリソースの操作
Webは様々な方法でデータを伝達することができる.
ex) HTML, XML, JSON, TEXT...
HTTPヘッダのデータ型を指定できます.
リソースを処理するためにデータ全体を送信するのではなく、メッセージを転送します.
3.自己叙述的な情報
要求されたデータがどのように処理されるかを決定するために、十分なデータを含める必要があります.
HTTPベースのRESTは、HTTPメソッド、Header情報、URIを含む情報として表すことができる.
GET: https://foo.co.kr/user/100, 사용자의 정보 요청
POST: https://foo.co.kr/user , 사용자의 정보 생성
PUT: https://foo.co.kr/user , 사용자 정보 생성 및 수정
DELETE: https://foo.co.kr/user/100 사용자 정보 삭제
4.ハイパーメディアをアプリケーション状態とするエンジンREST APIの開発に際しては、クライアント要求のデータのみに応答するのではなく、関連リソースのリンク情報も含めなければならない.
これらの条件が備わっていればREST Fulとして表され、REST APIと呼ばれる.
GET API
使用方法
@RestController
@RequestMapping("/api/get")
public class GetApiController {
@GetMapping(path="/hello") //http://localhost:8081/api/get/hello
public String hello(){
return "get Hello";
}
@RequestMapping(path = "/hi",method = RequestMethod.GET)
public String hi(){
return "hi";
}
}
複数の方法でマッピングできます.@PathVariable
// http://localhost:8081/api/get/path-variable/{name}
// GetMapping 이름과 매개변수 이름 같아야 함 ->
@GetMapping(path = "/path-variable/{name}")
public String pathVariable(@PathVariable(name = "name") String pathName){
System.out.println("path variable : " + pathName );
return pathName;
}
urlには一定の値と可変の値があります.変更部分は{}で宣言します.
http://localhost:8081/api/get/path-variable/{name}
上のurlは,ユーザによってnameの値が変化する場合である.@PathValibaleをパラメータとして受信できます.
宣言されたurlと同じ名前でパラメータ名を設定する必要があります.default nameをurlと同じ名前で宣言する場合は、他の名前のパラメータを使用できます.
@PathVariable(name = "name")
@RequestParamquery-paramはurl中?key 1=value 1&key 2=value 2&key 3=value 3の形式で伝達されます.
Map形式で
//http://localhost:8081/api/get/query-param?user=steve&[email protected]&age=30
@GetMapping(path = "/query-param")
public String queryParam(@RequestParam Map<String,String> queryParam){
StringBuilder sb = new StringBuilder();
queryParam.entrySet().forEach( entry -> {
System.out.println(entry.getKey());
System.out.println(entry.getValue());
System.out.println("\n");
sb.append(entry.getKey()+" = "+entry.getValue() +"\n");
});
return sb.toString();
}
一般パラメータとして // 넘겨 받는 매개변수 제한 가능, 수정할 때, 귀찮음
@GetMapping(path = "/query-param02")
public String queryParam02(
@RequestParam String name,
@RequestParam String email,
@RequestParam int age
){
return name + " " + email + " " + age;
}
参照としてdtoクラスを作成する// 참조형 매개변수로 선언, 깔끔함. dto
@GetMapping(path = "/query-param03")
public String queryParam03(UserRequest userRequest){
System.out.println(userRequest.getName());
System.out.println(userRequest.getEmail());
System.out.println(userRequest.getAge());
return userRequest.toString();
}
DTOデータ転送オブジェクト(DTO)は層間データ交換のためのオブジェクトであり、DTOは論理を持たない純粋なデータオブジェクト(getter&setterのクラスのみ)
POST API
使用方法
@RestController
@RequestMapping("/api")
public class PostApiController {
// post일 때는 RequestBody get일 때는 RequestParam
@PostMapping("/post")
public void post(@RequestBody Map<String,Object> requestData){
requestData.forEach((key, value) -> {
System.out.println("key : " + key);
System.out.println("value : " + value);
});
}
requestを受信するには@requestBodyが必要です.map形式でリクエストを受け入れれば、どんな代価を払っても得ることができるが、この点は不安だ.
@PostMapping("/post02")
public void post02(@RequestBody PostRequestDto requestData){
System.out.println(requestData);
System.out.println(requestData.toString());
}
dtoクラスの作成と受信は安全ですPUT API
使用方法
@RestController
@RequestMapping("/api")
public class PutApiController {
@PutMapping("/put/{userId}")
public PostRequestDto put(@RequestBody PostRequestDto requestData, @PathVariable(name = "userId") Long id){
System.out.println(requestData);
System.out.println(id);
return requestData;
}
}
Postのようにリクエストを受信するにはRequestBodyコメントが必要です.DELETE API
使用方法
@RestController
@RequestMapping("/api")
public class DeleteApiController {
@DeleteMapping("/delete/{userId}")
public void delete(@PathVariable(name = "userId") Long id,@RequestParam String account){
System.out.println("id : " + id + " account : " + account);
}
}
Reference
この問題について(REST API), 我々は、より多くの情報をここで見つけました https://velog.io/@ijh9404/REST-APIテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol