APIベース(Part 1:要求応答をエンティティとして直接使用)


Postmanを使用してAPIをテストします.
以前はコントローラがリクエストを受信して処理していましたが、なぜAPIを使用するのですか?
コントローラはHTML形式でフォームデータを受信し、登録するページのパスを返すが、APIにはiOS、Android、VUE、Reactなどの独立したフロントエンドクライアントがある.クライアントとサーバ間の通信は、通常、APIのみで提供されるため、APIを介して要求を受信し、JSONなどのデータに応答することを学習します.
@RestController //@Controller && @ResponseBody
@RequiredArgsConstructor
public class MemberApiController {

    private final MemberService memberService;
    /**
     * V1: Reqeust & Response로 Member 엔티티를 직접 받는다.
     * 문제점
     * - 엔티티에 프레젠테이션 계층을 위한 로직이 추가된다.
     * - 엔티티에 API 검증을 위한 로직이 들어간다. (@NotEmpty 등등)
     * - 실무에서는 회원 엔티티를 위한 API가 다양하게 만들어지는데, 한 엔티티에 각각의 API를 위한 모든 요청 요구사항을 담기는 어렵다.
     * - 엔티티가 변경되면 API 스펙이 변한다.
     * 결론
     * - API 요청 파라미터로 절대 엔티티 자체를 받는 것을 기피
     * - API 요청 스펙에 맞추어 별도의 DTO를 파라미터로 받는다.(CreateMemberRequest)
     */
    @PostMapping("/api/v1/members") //회원 등록 api
    public Member saveMemberV1(@RequestBody @Valid Member member) {
        // @RequestBody == Node.js 에서 req.body 와 같다고 생각하면 됨
        return memberService.findOne(member.findId());
    }
}
@RestController:
-> @Controller + @ResponseBody
以前は@Controllerのみを使用していた場合、Stringリクエストに応答する応答としてHTMLパス&ファイル名を返します.
逆に、RestControllerには@ResponseBodyも含まれているため、必要に応じてデータを返して要求に応答できます.
(詳細については、学習済みSpringMVC 1&SpringMVC 2:https://github.com/k-ms1998/Spring-studiesを参照)
V1:
リクエストによってエンティティ自体が受信され、応答もエンティティに返されます.
これは最も簡単な方法ですが、実際の操作では、このような方法で要求を受信してデータを返すことはありません.
エンティティが変更された場合は、そのエンティティを使用するすべてのAPIを変更する必要があります.また,応答を送信する際に仕様に従って応答を送信することは困難であり,APIは不要な値を返す.
これらの問題を解決するために、DTOを使用してDTO要求を受信し、DTOを応答に戻します.