REST API
: REST를 기반으로 만들어진 APIREST
: Representational State Transfer의 약자로, 자원을 이름으로 구분하여 해당 자원의 상태를 주고받는 모든 것
- HTTP URI(Uniform Resource Identifier)를 통해 자원(Resource)을 명시하고,
- HTTP Method(POST, GET, PUT, DELETE, PATCH)를 통해
- 해당 자원(URI)에 대한 CRUD Operation을 적용하는 것을 의미
HTTP 프로토콜과 CRUD의 관계
POST
- Create
- 데이터를 생성하기 위해 사용 (INSERT)
- Body (o)
GET
- READ
- 데이터를 조회하기 위해 사용 (SELECT)
- Body (x) - URL로 정보 요청
PUT
- Update
- 데이터를 수정하기 위해 사용 (UPDATE)
- Body (o)
DELETE
- Delete
- 데이터를 삭제하기 위해 사용 (DELETE)
- Body (x)
PUT
과PATCH
의 차이
PUT
: 리소스의 모든 것을 업데이트
- 보내지지 않은 정보에 대해서는 null값으로 업데이트
PATCH
: 리소스의 일부를 업데이트
- 보내지지 않은 정보에 대해 기존 데이터를 유지하는 방식으로 대응
Postman
- 개발한 API를 테스트하고, 테스트 결과를 공유하여 API 개발의 생산성을 높여주는 플랫폼
- /posts 경로로 접근하여 Post DB의 데이터를 CRUD 할 수 있도록 Rest API 작성
- GET
- /posts: Post 테이블의 모든 데이터 보여주기
- /posts/{id}: id(primary key)가 일치하는 Post 데이터 보여주기
- /posts?userId={userId}: userId가 일치하는 Post 데이터 보여주기
- POST
- /posts: 새로운 Post 데이터 생성
- PUT
- /posts/{id}: id가 일치하는 Post 데이터 수정
- DELETE
- /posts/{id}: id가 일치하는 Post 데이터 삭제
이번 프로젝트에서는 jsp를 사용하지 않으므로 jsp 라이브러리 추가, 프로젝트 구조 변경은 하지 않는다.
프로젝트 구조
DB의 데이터에 접근할 수 있도록 PostVo.java
를 작성한다.
Post 테이블 구조
PostMapper.xml
에 Post 테이블의 전체 데이터를 가져오는 SQL문과 userId 또는 id가 일치하는 데이터를 가져오는 SQL문을 작성한다.PostMapper.java
에 getPostList
와 getPostListByUserId
, getPostById
메서드를 선언한다.getPostList
는 Post 테이블의 전체 데이터를 가져오는 메서드이므로 매개변수가 필요없으며, PostVo 타입의 데이터들을 List에 담아 반환한다.
getPostListByUserId
는 userId(Post 테이블이 User 테이블에서 참조하고 있는 Foreign Key) 값에 따라 데이터를 가져오는 메서드이므로 매개변수로 userId가 필요하며, PostVo 타입의 데이터를 List에 담아 반환한다.
getPostById
는 id(Post 테이블의 Primary Key) 값에 따라 데이터를 가져오는 메서드이므로 매개변수로 id가 필요하며, id에 따른 Post 데이터는 1개씩 존재하므로 PostVo 타입의 데이터를 반환한다.
PostService.java
에 PostMapper의 getPostList
와 getPostListByUserId
, getPostById
메서드를 호출하여 로직을 수행하는 메서드를 작성한다.PostController.java
에 GET 요청을 처리하는 controller를 작성한다.
@Controller
와@RestController
의 차이
@Controller
: view를 반환@RestController
: JSON과 같은 데이터를 반환- 현재 프로젝트에서는 JSON 형식의 데이터를 처리하므로 @RestController annotation을 사용한다.
PostMapper.xml
에 새로운 Post 데이터를 추가하는 SQL문을 작성한다.PostMapper.java
에 insertPost
메서드를 선언한다.
insertPost
는 Post 테이블에 새로운 데이터를 추가하는 메서드이므로 PostVo 타입의 데이터가 매개변수로 필요하며, 테이블에 insert 된 행의 개수를 int로 반환한다.int 타입의
insert
,update
,delete
메서드
- SQL의 영향을 받은 행의 개수를 반환
→ 0을 반환한다면 sql문은 성공적으로 실행됐으나 테이블에서 영향을 받은 행이 없다는 의미. 실패했다는 의미가 아니다!- insert는 데이터를 추가하는 것이므로 0을 반환할 수 없다.
→ 0으로 테스트 금지!
MyBatis Query return 값
Select
- 성공: Select문에 해당하는 결과
- 실패: 에러
Insert
- 성공: 1 (여러개인 경우도 1)
- 실패: 에러
Update
- 성공: Update된 행의 개수 (없으면 0)
- 실패: 0
Delete
- 성공: Delete된 행의 개수 (없으면 0)
- 실패: 에러
PostService.java
에 PostMapper의 insertPost
메서드를 호출하여 로직을 수행하는 메서드를 작성한다.PostController.java
에 POST 요청을 처리하는 controller를 작성한다.
PostMapper.xml
에 id가 일치하는 Post 데이터를 수정하는 SQL문을 작성한다.PostMapper.java
에 updatePost
메서드를 선언한다.
updatePost
는 Post 테이블에서 id가 일치하는 데이터를 수정하는 메서드이므로 PostVo 타입의 데이터가 매개변수로 필요하며, 테이블에서 update 된 행의 개수를 int로 반환한다.PostService.java
에 PostMapper의 updatePost
메서드를 호출하여 로직을 수행하는 메서드를 작성한다.PostController.java
에 PUT 요청을 처리하는 controller를 작성한다.
path variable로 넘어온 id를 PostVo 타입의 객체의 id로 설정해준다.
PUT request가 올 때 Body에 담겨온 데이터를 PostVo 타입의 객체에 담아 postService의 updatePost 메서드에 넘겨주어 id로 검색한 Post 데이터를 수정하는 로직을 수행한다.
PostMapper.xml
에 id가 일치하는 Post 데이터를 삭제하는 SQL문을 작성한다.PostMapper.java
에 deletePost
메서드를 선언한다.
deletePost
는 Post 테이블에서 id가 일치하는 데이터를 삭제하는 메서드이므로 id가 매개변수로 필요하며, 테이블에서 delete 된 행의 개수를 int로 반환한다.PostService.java
에 PostMapper의 deletePost
메서드를 호출하여 로직을 수행하는 메서드를 작성한다.PostController.java
에 DELETE 요청을 처리하는 controller를 작성한다.
Source Code
https://github.com/wooryung/REST_API_Basic.git
정리 너무 잘하셨네요!! 공부하는데 많은 도움이 되었습니다!