모든 개발자를 위한 HTTP 웹 기본 지식 강의 수강 후, 정리한 글입니다.
GET
POST
, PUT
, PATCH
GET
, 쿼리 파라미터 없이 리소스 경로로 단순하게 조회가 가능하다.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를 모르기 때문이다. /members
PUT
을 사용한 이유: 클라이언트가 이미 등록될 리소스의 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