서버에서 단순 별 이미지를 클라이언트에게 내려주는 것. 클라이언트 측에서 데이터를 전송할 필요가 없다.
Content-Type: application/x-www-form-urlencoded
: 기본 설정
form 태그 안에 POST 방식으로 보내는 경우, 메시지를 바디에 담아서 보낸다.
form 태그 안에 GET 방식으로 보내는 경우, 쿼리 파라미터로 보낸다.
enctype="multipart/form-data"
로 전송하면 웹 브라우저가 경계(boundary)를 자동으로 설정해준다. 여러 바이너리 컨텐트 파일을 보내기 위함.
📌 정리
- HTML Form은 GET도 전송 가능
- HTML Form submit시 POST전송
- 예) 회원 가입, 상품 주문, 데이터 변경
- Content-Type: application/x-www-urlencoded
- form의 내용을 메시지 바디를 통해서 전송
(key=value, like 쿼리 파라미터 형식)- Content-Type: multipart/form-data
- 파일 업로드 같은 바이너리 데이터 전송시 사용
- 다른 종류의 여러 파일과 폼의 내용 함께 전송 가능
(그래서 이름이 multipart)- 참고: HTML Form 전송은 GET, POST만 지원
클라이언트에서 서버로 데이터를 바로 전송하는 경우
URI는 "리소스"를 식별해야지, 동작에 집중해서는 안된다.
회원 목록 /members -> GET
회원 등록 /members -> POST
회원 조회 /members/{id} -> GET
회원 수정 /members/{id} -> PATCH, PUT, POST
회원 삭제 /members/{id} -> DELETE
PUT: 완전히 덮어야 하는 경우사용
POST /mebers
HTTP/1.1 201 CREATED
Location: /members/100
클라이언트는 등록될 리소스의 URI를 모른다. 서버가 식별 URI를 생성해준다. 이러한 형식을 컬렉션이라고 부른다. 서버가 리소스 디렉토리를 관리하고, 리소스의 URI를 생성 관리한다.
파일 목록 /files -> GET
파일 조회 /files/{filename} -> GET
파일 등록 /files/{filename} -> PUT
파일 삭제 /files/{filename} -> DELETE
파일 대량 등록 /files -> POST
원격지에 파일 관리 시스템이 있는 것. 파일 등록하는 경우에, 클라이언트가 파일 이름을 알고 있으므로 URI를 알고 있다. 또한 파일을 업로드 하는경우 기존의 파일 내용을 덮어버리는 것이 맞으므로 PUT이 적절하다.
PUT /files/star.jpb
POST와 달리, 클라이언트가 식별 URI를 알고 직접 등록한다. 이같은 방식을 스토어(Store) 라고 한다. 클라이언트가 직접 리소스의 저장소를 관리하는 것으로 이는 클라이언트가 리소스의 식별 URI를 알고 있으며 이를 관리할 수 있음을 의미한다.
실무에서는 거의 대부분 post기반의 컬렉션을 주로 사용한다. put기반의 스토어는 파일 업로드 기반으로 드물게 사용 된다.
- 회원 목록 /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
회원 등록에는 두가지 URI를 모두 사용 가능. Validation문제를 고려하면 등록의 GET, POST URI를 일치시켜 놓는것(members/new -> GET,POST)이 좋다. (검증과정 중 오류 발생시 다시 폼 페이지로 옮길때 URI 변경이 필요 없으므로)
DELETE 메서드를 쓰면 좋지만, 이것이 지원이 되지 않는 경우 어쩔 수 없이 메서드는 POST를 이용하고 URI로 구별해야 한다.
/new
, /edit
, /delete
실무에서는 컨트롤 URI 이용이 많다. 최대한 리소스 개념을 토대로 URI를 설계하고 한계가 있을때 대체제로 컨트롤 URI를 사용해야 한다.
📌 정리
- HTTP API - 컬렉션
- POST 기반 등록: 서버가 리소스 URI 결정
- HTTP API - 스토어
- PUT 기반 등록: 클라이언트가 리소스 URI 결정
- HTTP FORM 사용
- 순수 HTML+HTML form 사용 -> GET, POST만 지원
/members/100
, /files/satr.jpg
/members
클라이언트는 요청만. 서버가 리소스에 이름 붙이고 등록, 저장, 삭제 다 수행
/files
클라이언트가 uri를 알고 관리. put으로 클라이언트가 파일을 대체해버린다. 진짜 파일, 게시판 정도에만 사용됨
/members/{id}/delete
실무의 복잡한 환경에서는 리소스는 uri로, 동작은 메서드로 구성하는 이상적인 수행이 어렵다. 컨트롤러, 컨트롤 URI를 통해 동사를 사용하여 리소스에 표기하는 것이 필요하다.
실제 URI를 설계 : 1. 가장 첫번째로 리소스를 초점으로 설계한다.(컬렉션이므로 s를 붙여서) 2. 이를 통해 해결이 안되는 경우 컨트롤 URI를 사용하여 명명한다.