[HTTP] 데이터 전달방식, 상황

미밈·2023년 3월 23일
0
post-thumbnail

데이터 전송 방식 2가지

👉 쿼리 파라미터

  • GET, 주로 정렬 필터(검색어)

👉 메시지 바디

  • POST, PUT, PATCH
  • 회원 가입, 상품 주문, 리소스 등록&변경

데이터 전송 상황 4가지

👉 정적 데이터 조회

  • 이미지, 정적 텍스트 문서 + GET + 쿼리 파라미터 없이 경로로 단순히 조회

👉 동적 데이터 조회

  • 추가 데이터를 전달 (쿼리 파라미터)
  • 검색&게시판 목록에서 정렬 필터(검색어=필터)
  • 조회 GET사용 + 쿼리 파라미터 사용해서 데이터 전달
GET /search?q=hello&hl=ko HTTP/1.1
Host: www.google.com

👉 HTML Form 데이터 전송

  • POST 전송

웹브라우저가 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 설계 예시

  1. POST기반 등록 ( 컬렉션 )
  • 새로운 리소스의 url를 서버가 만들어서 넘겨줌
  • ✨클라이언트는 등록될 리소스의 uri를 모름✨
  • 컬렉션
    : 서버가 관리하는 리소스 디렉토리
    • 서버가 리소스 URI 생성&관리
  1. PUT기반 등록 ( 스토어 )
  • 클라이언트가 등록될 리소스의 uri를 알고 있어야한다.
  • ✨클라이언트가 직접 리소스의 URI를 지정✨
  • 스토어
    : 클라이언트가 관리하는 리소스 저장소
    : 클라이언트가 리소스의 URI를 알고 관리

대부분 POST기반을 사용


HTML FORM 사용시,

  • 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
profile
하나씩 차근차근 해보는 초초초급개발자

0개의 댓글