HTTP API 설계 개념 간단 정리

HTTP API 설계

(1) 컬렉션(Collection) 방식

- 대부분이 이 방식을 사용
- POST 기반 등록

 

예를 들어서 '회원 관리 시스템 API' 라고 했을 때

여기서 리소스는 '회원'

회원 목록 /members GET
회원 등록 /members POST
회원 조회 /members/{id} GET
회원 수정 /members/{id} PATCH(부분수정-회원정보),
PUT(덮어쓰기-게시글),
POST
회원 삭제 /members/{id} DELETE

- 클라이언트는 새로 등록될 리소스의 URI를 모른다!

회원 등록을 하면 클라이언트는 id 모름. 아니, 몰라도 된다.

그래서 서버가 새로 등록된 리소스 URI를 생성해준다.

HTTP/1.1 201 Created
Location: /members/100

- 서버가 관리하는 리소스 디렉토리
- 서버가 리소스의 URI를 생성하고 관리

 

 

(2) 스토어(Store) 방식

- PUT 기반 등록

 

예를 들어서 '파일 관리 API' 라고 했을 때

여기서 리소스는 '파일'

파일 목록 /files GET
파일 조회 /files/{filename} GET
파일 등록 /files/{filename} PUT(덮어쓰기)
파일 삭제 /files/{filename} DELETE
파일 대량 등록 /files POST

- 클라이언트가 리소스의 URI를 알고 있어야 한다.

a파일을 등록하려고 하면 클라이언트가 직접 리소스의 URI를 지정한다  

PUT /files/a.jpg

- 클라이언트가 관리하는 리소스 저장소

- 클라이언트가 리소스의 URI를 알고 관리

 

 

(3) HTML FORM 사용

- GET, POST만 지원

 

예를 들어서 '웹 페이지 회원 관리 API' 라고 했을 때
여기서 리소스는 '회원'

회원 목록 /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
(DELETE를 못쓰기 때문에
이런게 '컨트롤 URI')

 

컨트롤 URI

- GET, POST만 지원해서 동사로 된 리소스 경로 사용

- POST의 /new, /edit, /delete가 컨트롤 URI

- HTTP 메서드로 해결하기 애매한 경우에 사용 (HTTP API 포함)

- 단, 무식하게 쓰면 안된다!

 


정리

문서(document)

- 단일 개념(파일 하나, 객체 인스턴스, 데이터베이스 row)

- /members/100, /files/a.jpg

 

컬렉션(coolection)

- 대부분이다.

- 서버가 관리하는 리소스 디렉터리

- 서버가 리소스의 URI를 생성하고 관리

- /members

 

스토어(store)

- 클라이언트가 관리하는 자원 저장소

- 클라이언트가 리소스의 URI를 알고 관리

- /files

 

컨트롤러(controller), 컨트롤 URI

- 문서, 컬렉션, 스토어로 해결하기 어려운 추가 프로세스 실행

- 동사를 직접 사용

- /members/{id}/delete

 

API 설계 정리

(1) 일단 리소스 파악하자

(2) 상세 동작은 GET POST 등 으로 해결해보자

(3) 애매하면 컨트롤 URI 로 해결해보자


 

참고하면 좋은 URI 설계 개념
https://restfulapi.net/resource-naming

 

REST API URI Naming Conventions and Best Practices

In REST, having a strong and consistent REST resource naming strategy – will prove one of the best design decisions in the long term. Let's discuss.

restfulapi.net


참고 강의 : https://taylog.tistory.com/203

 

[강의리뷰] “모든 개발자를 위한 HTTP 웹 기본 지식” 후기 | 인프런

모든 개발자를 위한 HTTP 웹 기본 지식김영한님의 실무에 필요한 HTTP 핵심 기능에 대한 강의다. 강의의 총 길이는 5시간 40분, 강의 구성은 아래와 같다.인터넷 네트워크URI와 웹 브라우저 요청 흐

taylog.tistory.com