클라이언트와 서버간의 데이터 전달방식에는 크게 두가지가 있다.
쿼리 파타미터를 통한 데이터 전송
GET
방식에서 사용된다.메시지 바디를 통한 데이터 전송
POST
, PUT
, PATCH
방식에서 사용된다.정적 데이터 조회
동적 데이터 조회
HTML Form을 통한 데이터 전송
HTML API를 통한 데이터 전송
GET
방식 이용쿼리 파라미터
미사용쿼리 파라미터
없이 리소스 경로로 단순하게 조회 가능GET
방식 이용GET
은 쿼리 파라미터
를 사용해서 데이터 전달쿼리 파라미터
를 기반으로 필터나 검색결과 등 처리결과를 응답해준다.HTML Form
전송은 GET
, POST
방식만 지원한다.회원가입을 예로 생각해봤을 때 웹 브라우저에서 회원정보를 모두 입력후 가입버튼을 누르게 되면 Form태그
의 정보를 취합해서action
에 작성된 경로로 해당 method
타입의 요청을 하게된다.
위 그림에서 전송 버튼을 누르면 action 경로(/save)로 method 타입요청(post)을 한다.
웹 브라우저가 생성한 요청 HTTP 메시지
의 Content-type
을 보면 x-www-form-urlencoded
라고 되어있다. 이 타입은 쿼리 파라미터와 거의 동일한 방식으로 데이터를 서버에 전송한다.
username=kim & age=20
urlencoded
로 되어있어서 메시지 바디에 담긴 내용이 인코딩되어 서버로 넘어간다.
ex) abc김 -> abc%EA%B9%80
x-www-form-urlencoded
는&
로 분리되고=
으로key
와value
를 연결하며,key-value tuple
로 인코딩 되는 값이다. 단, 바이너리 데이터에 사용하기에는 적합하지 않다.
method
타입이 GET
방식으로 되어있다면 메시지 바디에 담겨있는 내용이 query string
으로 path
뒤에 조합된다.GET
방식은 리소스 변경이 발생하는 곳에 사용하면 안된다. 오직 조회시에만 사용되어야 한다.enctype
을 multipart/form-data
로 작성해 해당 폼에 파일이 있다는 것을 표시한다. multipart/form-data
형식은 http
메시지에 임의의 구분자(-----XXX
)로 form
간 data
를 구분지어 multipart
로 나누어준다.백엔드 시스템 통신
아이폰, 안드로이드같은
HTML에서 Form 대신 자바스크립트를 통신에 사용(Ajax)
React, Vue 같은 웹 클라이언트와 API 통신시 사용
메시지 바디를 통한 데이터 전송
조회, 쿼리 파라미터로 데이터 전달
application/json을 주로 사용 (표준)
TEXT, XML, JSON 등
HTTP API - 컬렉션
POST
기반 등록회원관리 시스템
HTTP API - 스토어
PUT
기반 등록정적 컨텐츠 관리
, 원격 파일 관리
HTML FORM 사용
GET
, POST
만 지원웹 페이지 회원 관리
[회원관리 시스템 HTTP API 설계]
회원목록 : /members
➡️ GET
회원등록 : /members
➡️ POST
회원조회 : /members/{id}
➡️ GET
id
를 조회한다. 회원수정 : /members/{id}
➡️ PUT
, PATCH
, POST
PUT
은 덮어쓰는 기능을하고 PATCH
는 데이터를 부분적으로 수정하는 기능을한다. 따라서 회원정보처럼 일부분만 수정해야하는 경우 PATCH
가 적합하다.PUT
이 적합할수도 있다.회원삭제 : /members/{id}
➡️ Delete
클라이언트는 등록될 리소스의 URI를 모른다.
/members
➡️ POST
POST /members
서버가 새로 등록된 리소스의 URI를 생성해준다.
HTTP/1.1 201 Created
Location: /members/100
컬렉션(Collection)
/members
를 의미한다.[파일관리 시스템 HTTP API 설계]
파일 목록 : /files
➡️ GET
파일 조회 : /files/{filename}
➡️ GET
파일 등록 : /files/{filename}
➡️ PUT
파일 삭제 : /files/{filename}
➡️ DELETE
파일 대량 등록 : /files
➡️ POST
클라이언트는 신규 등록될 자원의 URI를 알고 있어야 한다.
/files/{filename}
➡️ PUT
PUT /files/star.jpg
클라이언트가 직접 리소스의 URI를 지정한다.
스토어(Store)
/files
실무에서는 대부분
POST
기반의 컬렉션을 많이 사용하고PUT
방식은 파일 관리같은 특수한 경우에만 사용한다.
[회원 관리 시스템 HTML Form 설계]
회원 목록 : /members
➡️ GET
회원 등록 폼 : /members/new
➡️ GET
회원 등록 : /members/new, /members
➡️ POST
/members/new
)로 맞추고 메서드만 다르게하여 요청하는 경우 그리고 각각 다른 URI(/members/new, /members
)를 사용하는 경우.회원 조회 : /members/{id}
➡️ GET
회원 수정 폼 : /members/{id}/edit
➡️ GET
회원 수정 : /members/{id}/edit
, /members/{id}
➡️ POST
회원 삭제 : /members/{id}/delete
➡️ POST
HTML Form
은 GET
, POST
만 지원하므로 제약이 있음.
이런 제약을 해결하기 위한 방법으로 동사로된 리소스 경로를 사용
POST
의 /new
, /edit
, /delete
가 컨트롤 URI
HTTP 메서드
로 해결하기 애매한경우 사용
HTTP API
에도 적용된다.문서
/members/100
, /files/star.jpg
컬렉션
POST
기반 등록/members
스토어
PUT
기반 등록/files
컨트롤러, 컨트롤 URI
/members/{id}/delete
[Reference]
gparkkii.log
Catsbi's Dlog
김영한 - HTTP 웹 기본지식 강의
Mozilla