HTTP API 설계 예시
- HTTP API - 컬렉션
POST 기반 등록 : 회원 관리 API 제공
- HTTP API - 스토어
PUT 기반 등록 : 정적 컨텐츠 관리, 원격 파일 관리
- HTML FORM - GET, POST만 지원
웹 페이지 회원 관리
1. 회원 관리 시스템
- API 설계 - POST 기반 등록
- 회원 목록 /members : GET
- 회원 등록 /members : POST
- 회원 조회 /mebers/{id} : GET
- 회원 수정 /members/{id} : PATCH, PUT, POST
- 회원 삭제 /members/{id} : DELETE
- POST - 신규 자원 등록 특징
- 등록될 리소스의 URI는 서버에서 생성되므로 클라이언트는 리소스 URI를 알 수 없다.
회원등록 /members → POST
POST /members
서버가 새로 등록된 리소스 URI를 생성
한다.
HTTP/1.1 201 Created
Location: /members/100
- 컬렉션
서버가 관리하는 리소스 디렉토리이며, 서버가 리소스의 URI를 생성하고 관리한다.
여기서의 컬렉션은 /members가 된다.
2. 파일 관리 시스템
- API 설계 - PUT 기반 등록
- 파일 목록 /files : GET
- 파일 조회 : /files/{filename} : GET
- 파일 등록 : /files/{filename} : PUT
- 파일 삭제 : /files/{filename} : DELETE
- 파일 대량 등록 /files : POST
- PUT - 신규 자원 등록 특징
클라이언트가 리소스 URL을 지정
하기 때문에 알고 있다.
파일 등록 /files/{filename} → PUT
PUT /files/image.jpg
- 스토어
클라이언트가 관리하는 리소스 저장소이며 클라이언트가 리소스의 URI를 알고 관리한다.
여기서 스토어는 /files가 된다.
html 폼 방식은 GET과 POST 방식만 지원
한다.
이런 제약을 해결하기 위해 동사로 된 리소스 경로를 사용하면 되는데, 이 것을 컨트롤 URI
라고 한다. 위의 예시에서 POST의 /new, /edit, /delete가 컨트롤 URI이며, HTTP 메서드로 해결하기 애매한 경우에도 사용할 수 있다. (HTTP API도 마찬가지로)
- AJAX 기술을 이용하면 다른 메서드도 사용할 수 있다.
설계
- 회원 목록 /members : GET
- 회원 등록 폼 /members/new : GET
- 회원 등록 /members/new, /members : POST
- 회원 조회 /members/{id} : GET
- 회원 수정 폼 /members/{id}/edit : GET
- 회원 수정 /members/{id}/edit, /members/{id} : POST
- 회원 삭제 /members/{id}/delete : POST
🌱 정리 - 참고하면 좋은 URI 설계 개념
- 문서(document) : 단일 개념(파일 하나, 객체 인스턴스, 데이터베이스의 row)
- /members/100, /files/image.jpg
- 컬렉션(collection) : 서버가 관리하는 리소스 디렉터리, 서버가 리소스의 URI를 생성하고 관리한다.
- /members
- 스토어(store) : 클라이언트가 관리하는 자원 저장소, 클라이언트가 리소스의 URI를 알고 관리한다.
- /files
- 컨트롤러(controller), 컨트롤 URI :동사를 사용해서 문서, 컬렉션, 스토어로 해결하기 힘든 추가 프로세스를 실행한다.
- /members/{id}/delete