데이터 전송 방식 2가지
👉 쿼리 파라미터
👉 메시지 바디
- POST, PUT, PATCH
- 회원 가입, 상품 주문, 리소스 등록&변경
데이터 전송 상황 4가지
👉 정적 데이터 조회
- 이미지, 정적 텍스트 문서 + GET + 쿼리 파라미터 없이 경로로 단순히 조회
👉 동적 데이터 조회
- 추가 데이터를 전달 (쿼리 파라미터)
- 검색&게시판 목록에서 정렬 필터(검색어=필터)
- 조회 GET사용 + 쿼리 파라미터 사용해서 데이터 전달
GET /search?q=hello&hl=ko HTTP/1.1
Host: www.google.com
웹브라우저가 HTML Form의 데이터를 읽어서 HTTP 메시지 생성
- 쿼리파라미터와 유사한 형식으로, KEY-VALUE형식으로 만들어서 HTTP BODY에 해당 내용 저장 후 -> 전송
POST /save HTTP/1.1
Host: localhost:8080
Content-Type: application/x-www-form-urlencoded
username=kim&age=20
메서드를 get으로 바꿀수 있음 -> 쿼리파라미터로 URL경로에 삽입
GET /save?username=kim&age=20 HTTP/1.1
Host: localhost:8080
save
에 GET메서드 X
GET메서드는 조회에서만 사용!
(POST면 BODY에 저장)
파일전송시 사용하는 타입 : enctype = "multipart/form-data
default 는 urlencoded
- 자동으로 xxx로 잘라주면서 http 메시지 생성
여러 멀티 파트로 데이터 전송 & 주로 바이너리 데이터 전송시 사용
- HTML FORM submit 시 POST 전송
- Content-Type : application/x-www-form-urlencoded
- form내용을 메시지 바디 통해서 전송
- 전송 데이터 url encoding 처리
- HTML Form은 GET 전송도 가능하긴 함(오직 조회에서만 사용할 것)
- 파일 전송 시 Content-Type : multipart/form-data
- 바이너리 데이터 전송시
- 다른 종류 여러 파일 & 폼의 내용 함께 전송 가능
- HTML Form 은 GET, POST만 지원
👉 HTTP API로 데이터 전송
POST /members HTTP/1.1
Content-Type: application/json
{
"username": "young",
"age": 20
}
- 서버 to 서버 & 앱 클라이언트 & 웹 클라이언트
- POST, PUT, PATCH : 메시지 바디 통해 데이터 전송
- GET : 조회, 쿼리 파라미터로 데이터 전달
- Content-Type : application/json을 주로 사용 ( 사실상 표준)
📖 총정리
정적 데이터 조회 : 이미지& 정적 텍스트 문서
동적 데이터 조회 : 검색 & 게시판 목록에서 정렬 필터(검색어)
HTML Form을 통한 데이터 전송 : 회원가입, 상품 주문, 데이터 변경
HTTP API를 통한 데이터 전송 : 회원가입, 상품주문, 데이터 변경
서버to서버, 앱 클라이언트 ,웹 클라이언트(ajax)
HTTP API 설계 예시
- POST기반 등록 ( 컬렉션 )
- 새로운 리소스의 url를 서버가 만들어서 넘겨줌
- ✨클라이언트는 등록될 리소스의 uri를 모름✨
- 컬렉션
: 서버가 관리하는 리소스 디렉토리
- PUT기반 등록 ( 스토어 )
- 클라이언트가 등록될 리소스의 uri를 알고 있어야한다.
- ✨클라이언트가 직접 리소스의 URI를 지정✨
- 스토어
: 클라이언트가 관리하는 리소스 저장소
: 클라이언트가 리소스의 URI를 알고 관리
대부분 POST기반을 사용
- GET, POST만 지원
- API로 해결 가능
- 순수 HTML인 경우 !
==> GET, POST만 사용하기 때문에 제약 O
- 폼을 가져올때 GET, 실제 행동 POST (같은 URL)
⬇️ 예시
강아지 등록 폼 /dogs/new -> GET
강아지 등록 /dogs/new -> POST
- DELETE와 같은 기능 사용 필요시 컨트롤 URI사용
( * HTML FORM은 GET, POST 메서드만 사용 가능하기 때문)
👉 컨트롤 URI
- GET, POST만 지원해서 제약 O
- ! 동사 !로 된 리소스 경로 사용
- /new, /edit, /delete 가 컨트롤 URI
- HTTP 메서드로 해결하기 애매한 경우 컨트롤 URI 사용
- 실무에선 사용 多 ( 단, 최대한 기본 기능에서 사용해보고 안될 떄 사용 )
URI 설계 기본 개념
- 문서
단일 개념 ( 파일하나, 객체 인스턴스, 데이터베이스 ROW )
예 ) /members/100, files/star.jpg
- 컬렉션
서버가 관리하는 리소스 디렉터리
- 스토어
클라이언트가 관리하는 자원 저장소
- 컨트롤러, 컨트롤 URI
문서, 컬렉션, 스토어로 해결하기 어려운 추가 프로세스
동사를 직접 사용
예 ) /members/{id}/delete