POST 기반 등록 방식
회원의 [ic]CRUD[/ic]를 예로 들면
그림과 같이 설계할 수 있습니다.
Update
수정에 관해서는 3가지 메서드 중에 고려할 수 있는데
회원 정보가 많아질수록 [ic]PUT[/ic]을 사용하면 회원정보 싹 다 새로 넣어야 되서
시간과 자원을 많이 소모할 수 있습니다.
왠만하면 [ic]PATCH[/ic]를 사용하며
게시물 수정같은 글을 통채로 갈아끼워 넣어야 할 때는 [ic]PUT[/ic]을 쓰기도 합니다.
서버에서 리소스를 생성하고 관리
클라이언트는 등록될 리소스의 [ic]URI[/ic]를 모릅니다.
회원을 등록하고싶을 때 [ic]/members[/ic]만 넘기면
서버에서 알아서 리소스 [ic]URI[/ic]를 생성해서 등록해줍니다.
포인트는 서버가 알아서 리소스를 만든다는 점입니다.
여기서 [ic]/members[/ic]를 Collection이라고 부릅니다.
PUT 기반 등록 방식
파일의 CRUD를 예로 들면
그림과 같이 설계할 수 있습니다.
Update
파일은 따로 수정할 필요 없이 등록([ic]PUT[/ic])만 하면 되므로 고민할 필요가 없습니다.
클라이언트에서 리소스를 생성하고 관리
[ic]POST[/ic] 기반 등록 방식과 반대로 [ic]PUT[/ic]은 클라이언트에서 [ic]리소스 URI[/ic]를 생성하고 관리합니다.
[ic]/files/100[/ic]이란 리소스를 클라이언트가 알고있는 상태에서 보냅니다.
여기서 [ic]/files[/ic]를 [ic]Store[/ic]라고 부릅니다.
위의 [ic]POST[/ic] 방식과 다른 점이므로 각 [ic]Entity의 특성[/ic]에 맞게 등록 방식을 다르게 적용하면 됩니다.
실무에서는 [ic]POST[/ic] 방식을 대부분 선호합니다.
정말 일부에서 파일 업로드 같은 곳에서는 [ic]PUT[/ic] 방식을 사용합니다.
HTML FORM 사용
[ic]HTML form 태그[/ic]는 [ic]GET[/ic], [ic]POST[/ic] 두개밖에 지원하지 않습니다.
이를 이용해 [ic]API[/ic]를 설계해야 한다면
이렇게 설계해야 합니다.
서버에서 HTML FORM, 틀 까지 전송
위의 두 방식과 달리
서버에서 탬플릿엔진까지 가동하여 [ic]HTML파일[/ic]을 전송하는 것이므로
[ic]FORM 정보[/ic]까지 따로 전송해야 합니다.
그래서 [ic]URI[/ic]가 겹치는 현상이 발생하므로 어쩔수 없이 [ic]컨트롤 URI[/ic]를 사용할 수 밖에 없습니다.
설계 방법
1. 리소스를 바탕으로 설계합니다.
회원은 [ic]members[/ic], 물품은 [ic]items[/ic]로 컬렉션으로 설계하도록 합니다.
되도록 동사는 사용하지 않습니다.
2. 상세 물품, 즉 문서는 컬렉션 안에 번호로 설계합니다.
단일 회원을 조회하고 싶다면 [ic]members/{id}[/ic], 물품 한개를 조회하고 싶다면 [ic]items/{id}[/ic]로 조회합니다.
컬렉션을 사용한 후에 뒤에 단일 개념이 오는 구조입니다.
3. 1, 2번으로 해결이 안되는 상황이면 컨트롤 [ic]URI[/ic]로 설계합니다.
기본적인 [ic]CRUD[/ic]는 위의 방식으로 해결되지만, 배달하라는 명령 등 복합적인 로직이 이루어질 때에는
[ic]URI[/ic]을 설계할 수 있는 방법이 별로 없습니다.
[ic]HTML form 방식[/ic]에서만 적용되는것이 아닌, [ic]HTTP API 설계[/ic]할 때에도 똑같은 어려움이 발생할 때가 있습니다.
이 때 [ic]컨트롤 URI[/ic]을 사용하여 설계해야합니다.
URI 설계 개념
문서 document
파일 한개, 객체 인스턴스, 데이터베이스의 row 등 단일 개념을 문서라고 합니다.
[ic]/members/100[/ic], [ic]/files/hyeok.jpg[/ic]
컬렉션 collection
서버가 관리하는 리소스 디렉터리입니다. 여기서 리소스의 URI를 생성하고 관리합니다.
[ic]POST[/ic] 방식으로 등록할 때 컬렉션을 사용합니다.
스토어 store
클라이언트가 관리하는 리소스 디렉터리입니다.
[ic]PUT[/ic] 방식으로 등록할 때 스토어를 사용합니다.
컨트롤러 controller, Controll URI
위의 3개를 적용하면서도 [ic]URI 설계[/ic]가 어려운 추가 프로세스 실행 과정은
동사를 직접 사용하여 해결합니다.
[ic]/members/{id}/process[/ic]
참조
모든 개발자를 위한 HTTP 웹 기본 지식 - 인프런 | 강의
실무에 꼭 필요한 HTTP 핵심 기능과 올바른 HTTP API 설계 방법을 학습합니다., - 강의 소개 | 인프런...
www.inflearn.com
REST Resource Naming Guide
In REST, having a strong and consistent REST resource naming strategy – will prove one of the best design decisions in the long term.
restfulapi.net
'CS > HTTP' 카테고리의 다른 글
[HTTP] 상태 코드 (0) | 2022.10.12 |
---|---|
[HTTP] 클라이언트에서 서버로 데이터 전송 방법 (0) | 2022.10.09 |
[HTTP] HTTP 메서드 (1) | 2022.10.08 |
[HTTP] HTTP란? (0) | 2022.10.07 |
[HTTP] 웹 브라우저 요청 흐름 간단 요약 (0) | 2022.10.05 |