클라이언트가 보내는 HTTP 요청 메세지의 첫줄 : 시작라인 = 요청 라인
그 아래 헤더 와 본문
응답 메세지 역시 첫줄은 상태 라인, 그 아래 헤더와 본문이 있음
요청이 성공하면 200, 데이터 생성 완료하면 201
찾을 수 없으면 404, 서버 오류시 500
REST API 응답 표준으로 사용하는 JSON 은 키와 값의 쌍으로 된 속성으로 데이터 표현
JSON의 value로 배열을 넣을 수도, 다른 JSON 을 넣을 수 도 있음
REST : HTTP URL로 서버 자원을 명시하고, HTTP 메서드로 해당 자원에 대해 CRUD 하는 것
API : 클라이언트가 서버의 자원을 요청할 수 있도록 서버에서 제공하는 인터페이스
REST API 구현과정
REST API 구현위해 URL을 설계해야 한다.
get,post,patch, delete 를 어떻게 구현할까
조회 요청 : /api/articles or /api/articles/{id} : GET 메서드로 Article 목록 전체 혹은 단일 조회
생성 요청 : /api/articles : POST 메서드로 새로운 Article 생성해 목록에 저장
수정 요청 : /api/articles/{id} : PATCH 메서드로 특정 Article 내용 수정
삭제 요청 : /api/articles/{id] : DELETE 메서드로 특정 Article 삭제
주소 설계가 끝났다면 URL 요청을 받아 그 결과를 JSON 으로 반환해줄 컨트롤러도 만들어야 한다.
게시판 만들 때는 일반 컨트롤러 ArticleController 사용했지만 REST API 로 응답 주고 받기 위해서는
REST 컨트롤러 사용, 응답 할 때 적절한 상태 코드를 반환하기 위해 ResponseEntity 라는 클래스도 활용
JSON 형태가 REST API URL 로 REST 컨트롤러에 요청하면 적절한 상태로 반환하는 ResponseEntity 클래스 응답
REST API 구현하기
기존과 마찬가지로 클래스 파일을 만들지만 클래스 위에 @RestController 붙인다.
일반 컨트롤러와 차이
원래는 mustache 파일을 반환하게 되어있었다.
Talend API Tester 에서 테스트 해보면 Body 파트에 HTML 코드가 있음
REST 컨트롤러는 JSON or text 데이터를 반환하는 반면
일반 컨트롤러는 뷰 페이지를 반환한다.
REST API : GET 구현
api/articles 에 GET 메서드로 요청
새 컨트롤러가 필요
ArticleApiController 만들기
GET POST PATCH DELETE 구현하기
POST : 매개변수로 dto만 받아오면 해결되나? 아니다.
REST API 에서 데이터를 생성할 때는 JSON 데이터를 받아와야 하므로 단순히 dto 로 받을 수 있는게 아님
dto 매개변수 앞에 @RequestBody 붙이면
요청시 Body에 실어 보내는 데이터를 create()메서드의 매개변수로 받아올 수 있다.
Patch
수정용 엔티티 생성하기
DB에 대상 엔티티가 있는지 확인하기
없거나 수정하려는 id가 잘못됐을 경우 처리하기
대상 엔티티가 있으면 수정 내용으로 업데이트하고 정상 응답(200) 보내기
DELETE
삭제하려고 입력 받은 id의 데이터를 찾는다
그 대상이 존재하지 않는다면 bad_Request 알림 띄우고 종료
존재한다면 리파지토리에서 delete 메서드를 이용해서 삭제하고 OK 알림 띄움