인프런 김영한님 [모든 개발자를 위한 HTTP 웹 기본 지식] 강의를 듣고 정리한 내용입니다.😊😊
<HTTP API 설계 과정 TIP>
1) 리소스를 식별하여 리소스만으로 URI를 설계한다.
2) 문서, 컬렉션, 스토어로 해결하기 어려운 상황의 경우, 컨트롤 URI를 사용한다.
1. HTTP API 설계 예시
POST 또는 PUT 기반으로 등록하는 2가지의 특징을 아는 것이 중요하다.
POST 기반 신규 자원 등록 방법(컬렉션)을 많이 사용한다.
1) HTTP API - 컬렉션
- POST 기반 등록
ex) 회원 관리 API 제공
2) HTTP API - 스토어
- PUT 기반 등록
ex) 정적 컨텐츠 관리, 원격 파일 관리
3) HTML FORM 사용
- 웹 페이지 회원 관리
- GET, POST만 지원
👉 회원 관리 시스템
1) API 설계 - POST 기반 등록
• 회원 목록 /members -> GET
• 회원 등록 /members -> POST
• 회원 조회 /members/{id} -> GET
• 회원 수정 /members/{id} -> PATCH, PUT, POST
• 회원 삭제 /members/{id} -> DELETE
Q. 회원 수정은 PATCH, PUT, POST 중 무엇으로 구현하는 것이 좋을까?
1) 개념적으로는 리소스 부분 변경인 PATCH로 하는 것이 가장 좋다.
2) 기존 리소스를 덮어써도 문제가 없는 경우, PUT을 사용할 수는 있지만 그런 경우는 거의 없다.
클라이언트에서 회원의 모든 데이터(id, 이름, email 등)을 다 보내야하기 때문이다.
- 게시글 수정같은 경우, 완전히 덮어써도 문제X
3) 애매한 경우, POST를 쓰면 된다.
2) POST - 신규 자원 등록 특징
• 클라이언트는 등록될 리소스의 URI를 모른다.
- 회원 등록 /members -> POST
- POST /members
• 서버가 새로 등록된 리소스 URI를 생성해준다.
- HTTP/1.1 201
Created Location: /members/100
• 컬렉션(Collection) ⭐⭐
- 서버가 관리하는 리소스 디렉토리
- 서버가 리소스의 URI를 생성하고 관리
- 여기서 컬렉션은 /members
👉 파일 관리 시스템
1) API 설계 - PUT 기반 등록
• 파일 목록 /files -> GET
• 파일 조회 /files/{filename} -> GET
• 파일 등록 /files/{filename} -> PUT
• 파일 삭제 /files/{filename} -> DELETE
• 파일 대량 등록 /files -> POST (다른 경로를 써도 된다.)
-> 파일 등록의 경우, 기존의 파일이 있는 경우 덮어쓰기 때문에 PUT을 사용한다.
2) PUT - 신규 자원 등록 특징
• 클라이언트가 리소스 URI를 알고 있어야 한다.
- 파일 등록 /files/{filename} -> PUT
- PUT /files/star.jpg
• 클라이언트가 직접 리소스의 URI를 지정한다.
• 스토어(Store) ⭐⭐
- 클라이언트가 관리하는 리소스 저장소
- 클라이언트가 리소스의 URI를 알고 관리
- 여기서 스토어는 /files
2. HTML FORM 사용
• HTML FORM은 GET, POST만 지원
• AJAX 같은 기술을 사용해서 해결 가능 -> 회원 API 참고
• 여기서는 순수 HTML, HTML FORM 이야기
• GET, POST만 지원하므로 제약이 있음
1) API 설계 - HTML FORM 사용
• 회원 목록 /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
회원 등록(POST)은 /member/new, /members 2가지로 URI 설계를 할 수있지만
회원 등록 폼과 회원 등록의 URL을 일치하는 것을 추천한다! 회원 수정의 경우도 마찬가지다.
HTML FORM을 사용하지 않는다면 회원 삭제의 URI는 /members/{id} DELETE로 설계하면된다.
하지만 HTML FORM은 GET, POST만 지원하기 때문에 어쩔 수 없이 컨트롤 URI를 써서 /members/{id}/delete POST로 설계한다.
2) HTML FORM 특징
• HTML FORM은 GET, POST만 지원
• 컨트롤 URI
- GET, POST만 지원하므로 제약이 있음
- 이런 제약을 해결하기 위해 동사로 된 리소스 경로 사용
- POST의 /new, /edit, /delete가 컨트롤 URI
- HTTP 메서드로 해결하기 애매한 경우 사용!! (HTML FORM을 사용하지 않더라도 쓸 수 O)
✔ 최대한 리소스 개념을 가지고 URI 설계 하고 상황에서 안 될 때 컨트롤 URI 대체제로 사용하는 게 좋다.
3. 정리
1) HTTP API - 컬렉션
- POST 기반 등록
- 서버가 리소스 URI 결정
2) HTTP API - 스토어
- PUT 기반 등록
- 클라이언트가 리소스 URI 결정
3) HTML FORM 사용
- 순수 HTML + HTML form 사용
- GET, POST만 지원
👉 참고하면 좋은 URI 설계 개념
● 문서(document)
- 단일 개념(파일 하나, 객체 인스턴스, 데이터베이스 row)
ex) /members/100, /files/star.jpg
● 컬렉션(collection)
- 서버가 관리하는 리소스 디렉터리
- 서버가 리소스의 URI를 생성하고 관리
ex) /members
● 스토어(store)
- 클라이언트가 관리하는 자원 저장소
- 클라이언트가 리소스의 URI를 알고 관리
ex) /files
● 컨트롤러(controller), 컨트롤 URI
- 문서, 컬렉션, 스토어로 해결하기 어려운 추가 프로세스 실행
- 동사를 직접 사용
ex) /members/{id}/delete
✔ 주로 컬렉션을 많이 사용하고, 파일/게시판 같은 경우에 스토어를 많이 사용한다.
[참고] https://restfulapi.net/resource-naming/
'📚 Computer Science > Network' 카테고리의 다른 글
[모든 개발자를 위한 HTTP 웹 기본 지식] 6. HTTP 상태코드 - 3XX 리다이렉션 (0) | 2023.08.14 |
---|---|
[모든 개발자를 위한 HTTP 웹 기본 지식] 6. HTTP 상태코드 - HTTP 상태 코드 소개, 2XX 성공 (0) | 2023.08.14 |
[모든 개발자를 위한 HTTP 웹 기본 지식] 5. HTTP 메서드 활용 - 클라이언트에서 서버로 데이터 전송 (0) | 2023.08.11 |
[모든 개발자를 위한 HTTP 웹 기본 지식] 4. HTTP 메서드 - HTTP 메서드의 속성 (0) | 2023.08.11 |
[모든 개발자를 위한 HTTP 웹 기본 지식] 4. HTTP 메서드 - PUT, PATCH, DELETE (0) | 2023.08.11 |