
모든 개발자를 위한 HTTP 웹 기본 지식 강의 수강 후, 정리한 글입니다.
GETPOST, PUT, PATCHGET, 쿼리 파라미터 없이 리소스 경로로 단순하게 조회가 가능하다.
GET, 쿼리 파라미터를 사용해서 데이터를 전달한다.
POST, 데이터를 저장하기 위해 메시지 바디를 통해 key=value의 쿼리 파라미터 형식으로 데이터를 전달한다. 이때, abc김 → abc%EA%B9%80 처럼 전송 데이터를 url encoding 처리한다.
GET, 데이터를 조회하기 위해 사용할 수 있다. GET 메서드를 리소스 변경이 발생하는 곳에는 사용하면 안되니 주의하자.
multipart/form-data, 주로 이미지 파일 업로드와 같은 binary form data에 사용한다.
POST, PUT, PATCH: 메시지 바디를 통해 데이터를 전송한다.GET: 쿼리 파라미터로 데이터 전달하여 조회한다.Content-Type: application/json: text, xml, json 등 사실상 표준으로 주로 사용한다.
회원 관리 시스템의 API를 설계한다고 해보자.
먼저 회원 관리에 관한 것이니 컬렉션을 /members로 하겠다.
| 기능 | 메서드 | URI |
|---|---|---|
| 회원 목록 | GET | /members |
| 회원 등록 | POST | /members |
| 회원 조회 | GET | /members/{id} |
| 회원 수정 | PATCH, PUT, POST | /members/{id} |
| 회원 삭제 | DELETE | /members/{id} |
다음으로 파일 관리 시스템의 API를 설계해보자.
파일 관리에 관한 것이니 스토어는 /files로 하겠다.
| 기능 | 메서드 | URI |
|---|---|---|
| 파일 목록 | GET | /files |
| 파일 조회 | GET | /files/{filename} |
| 파일 등록 | PUT | /files/{filename} |
| 파일 삭제 | DELETE | /files/{filename} |
| 파일 대량 등록 | POST | /files |
여기서, 회원 등록에는 POST, 파일 등록에는 PUT, 파일 대량 등록에는 POST를 사용하는 이유가 궁금해져야 한다.
POST를 사용한 이유: 회원 등록 시에 클라이언트는 등록될 리소스의 URI를 모르기 때문이다. /membersPUT을 사용한 이유: 클라이언트가 이미 등록될 리소스의 URI를 알고 있기 때문이다. URI가 파일명으로 저장되는데, 파일명을 클라이언트가 보내준다. /files/{filename}POST를 사용한 이유: PUT 메서드를 같은 URI로 1개의 파일 등록에 사용했기 때문에 임의로 POST 메서드는 파일 대량 등록에 사용하겠다는 목적을 설정한 것이다.URI /files, method POST를 사용하고 그리고 보안이나 충돌 방지 등의 이유로 파일명을 랜덤으로 생성한다면, PUT, POST의 2가지 API를 만들지 않고 POST 하나로 처리할 수 있을 것 같기도 하다.
GET, POST만 지원하므로 제약 존재POST의 /new, /edit, /delete 컨트롤 URIPOST기반. 서버가 관리하는 리소스 디렉터리로, 서버가 리소스의 URI를 생성하고 관리한다. 예시) /members
PUT기반. 클라이언트가 관리하는 리소스 저장소로, 클라이언트가 리소스의 URI를 알고 관리한다. 예시) /files
단일 개념(파일 하나, 객체 인스턴스, 데이터베이스 row)
예시) /members/100, /files/star.jpg
위의 상황으로 해결하기 어려운 추가 프로세스 실행, 동사를 사용
예시) /members/{id}/delete