좋은 URI 구조란 무엇인가?
회원 정보관리를 하는 API를 개발한다고 가정하자. 그러면 URI는 어떻게 설계해야 할까? 웹 애플리케이션의 모든 로직은 CRUD를 기반으로 하므로 다음과 같이 설계할 수 있다.
- 회원 목록 조회 : /read-member-list
- 특정 회원 조회 : /read-member-by-id
- 회원 등록 : /create-member
- 회원 수정 : /update-member
- 회원 삭제 : /delete-member
그러나 이러한 URI는 문제가 있다. 보는 바와 같이 하나의 자원(member)에 대해 각각의 행위마다 URI가 존재하면 해당 자원이 변경되었을 때 관련된 모든 URI를 수정해야 하기 때문이다. 그래서 좋은 URI 구조는 자원을 명확히 드러내는 구조이다.
이것을 해결하기 위해 URI에서 자원(member)과 행위(CRUD)를 분리한다. URI에는 자원을 명확히 표현하고, 행위는 HTTP 메서드로 구분하는 것이다. 주로 사용되는 HTTP 메서드는 GET, POST, PUT, PATCH, DELETE가 있다. 이러한 방식을 따른 API가 REST API이고 다음과 같이 표현할 수 있다.
- 회원 목록 조회 : (GET) /members
- 특정 회원 조회 : (GET) /members/{id}
- 회원 등록 : (POST) /members
- 회원 수정 : (PUT or PATCH) /members/{id}
- 회원 삭제 : (DELETE) /members/{id}
REST API의 조건에는 자원을 드러내는 것뿐만 아니라 다른 조건들도 있다. 그러나 많은 사람들이 이 조건만 지켜도 REST API라고 표현하기 때문에 이 정도로도 REST API로 표현한다.
HTTP 메서드의 종류와 특징
HTTP 요청 메세지에는 HTTP 메서드를 지정할 수 있다. HTTP 메서드를 지정했을 때 해당 메세지가 특정한 기능을 가지는 것은 아니다. 단지 해당 요청이 어떠한 동작을 수행해야 하는지 권장 및 정의하는 것이다. 주로 사용되는 HTTP 메서드와 그 역할은 다음과 같다.
- GET
- 리소스 조회
- 서버에 전송할 데이터는 쿼리 파라미터를 통해 메세지 헤더로 전달한다.
- 메세지 바디도 사용할 수 있지만 지원하지 않는 곳이 많아서 권장하지 않는다.
- POST
- 요청 데이터 처리
- 새 리소스를 생성하거나 변경하는 것을 넘어서 프로세스를 처리하기 위해 사용한다.
ex) 결제 완료 → 배달 시작 → 배달 완료 - 다른 메서드로 처리하기 애매한 경우 사용한다.
ex) JSON으로 데이터를 전달해야 하는데 GET 메서드를 사용하기 어려운 경우
- PUT
- 리소스 대체
- 전달한 데이터를 통해 리소스가 있으면 대체하고, 없으면 생성한다. 즉, 덮어 씌운다.
- POST와의 차이점은 클라이언트가 리소스를 식별한다는 점이다.
ex) 회원 생성 API의 URI가 POST를 사용한다면 /member이고, PUT을 사용한다면 /member/100이다. PUT을 사용하면 특정 회원 정보가 없을 경우, 새로 생성하기도 해야 하기 때문이다.
- PATCH
- 리소스 부분 변경
- DELETE
- 리소스 제거
'Web' 카테고리의 다른 글
| [Web] 웹 서버와 웹 애플리케이션 서버(WAS)의 차이 (0) | 2023.08.13 |
|---|---|
| [Web] 웹 애플리케이션이란? (0) | 2023.08.13 |
| [Web] 웹의 동작 방식과 URI (0) | 2023.08.01 |