[HTTP] HTTP 메서드 활용

지현·2021년 11월 17일
0

http

목록 보기
5/8

클라이언트에서 서버로 데이터 전송

데이터 전달 방식

  • 쿼리 파라미터를 통한 데이터 전송 : GET
  • 메시지 바디를 통한 데이터 전송 : POST, PUT, PATCH

정적 데이터 조회

  • 이미지, 정적 텍스트 문서
  • 조회는 GET 사용
  • 정적 데이터는 일반적으로 쿼리 파라미터 없이 리소스 경로로 단순하게 조회 가능

동적 데이터 조회

  1. 클라이언트가 추가 데이터를 쿼리 파라미터를 통해 전달
  2. 서버에서 쿼리 파라미터를 기반으로 정렬 필터해서 결과를 동적으로 생성
  • 조회 조건을 줄여주는 필터(검색), 조회 결과를 정렬하는 정렬 조건에 주로 사용
  • 조회는 GET 사용
  • GET은 쿼리 파라미터 사용해서 데이터를 전달

HTML Form 데이터 전송

  • HTML Form submit시 POST 전송 (데이터 변경 할 때 사용)
    • Form의 데이터를 읽어서 HTTP 메세지를 생성
    • Content-Type: application/x-www-form-urlencoded 사용
      • form의 내용을 Key&Value(쿼리 파라미터) 형식으로 만들어서 http body에 넣어 전송
      • 전송 데이터를 url encoding 처리
  • HTML Form은 GET 전송도 가능 (GET은 조회에서만 사용하기!!)
    • GET이면 URL 경로에(쿼리 파라미터 형식으로 > GET이니까 메세지 바디 사용 X) 넣음
  • POST면 메세지 바디에 HTTP 메세지를 쿼리 파라미터 형식으로 넣고, GET이면 URL 경로에 HTTP 메세지를 쿼리 파라미터 형식으로 넣음
  • Content-Type: multipart/form-data
    • 파일 업로드 같은 바이너리 데이터 전송시 사용
    • 다른 종류의 여러 파일과 폼의 내용 함께 전송 가능
    • 멀티로 여러 컨텐츠 타입에 대한 데이터들을 보낼 수 있음
  • HTML Form 전송은 GET, POST만 지원

HTTP API 데이터 전송

  • 서버 to 서버 전송 시 사용 : 백엔드 시스템 통신
  • 앱 클라이언트 전송 시 사용 : 아이폰, 안드로이드
  • 웹 클라이언트 : HTML에서 Form 전송 대신 자바 스크립트를 통한 통신에 사용(AJAX)
  • POST, PUT, PATCH : 메시지 바디를 통해 데이터 전송
  • GET : 조회, 쿼리 파라미터로 데이터 전달
  • Content-Type : application/json을 주로 사용 (사실상 표준)

HTTP API 설계 예시

HTTP API POST - 신규 자원 등록

Post로 데이터를 등록 할 때는 서버에서 보통 리소스 URI를 결정하고 생성 > 클라이언트는 서버에 요청

  • 클라이언트는 등록될 리소스의 URI를 모름
    • POST /members
  • 서버가 새로 등록된 리소스 URI를 생성 > 컬렉션
    • HTTP/1.1 201 Created
      Location: /members/100

컬렉션(Collection)

  • 서버가 관리하는 리소스 디렉토리
  • 서버가 리소스의 URI를 생성하고 관리
  • 여기서 컬렉션은 /members

HTTP API PUT - 신규 자원 등록

  • 클라이언트가 리소스 URI를 알고 있어야 함
    • PUT /files/star.jpg
  • 클라이언트가 직접 리소스의 URI를 지정
  • 생성될 리소스의 URI를 다 알고 클라이언트가 관리 > 스토어

스토어(Store)

  • 클라이언트가 관리하는 리소스 저장소
  • 클라이언트가 리소스의 URI를 알고 관리
  • 여기서 스토어는 /files

PUT과 POST의 차이점

  • POST는 URI를 클라이언트가 결정하지 않음, 단지 클라이언트가 서버에 요청 > 서버에 넘기면 서버가 알아서 리소스 URI에 대한 경로를 서버에서 판단
  • PUT은 등록을 할 때 클라이언트가 등록될 리소스 URI를 다 알고 등록해야함
  • 대부분은 POST 기반(컬렉션)을 많이 사용

HTML FORM 사용

  • HTML FORM은 GET, POST만 지원 (순수 HTML, HTML FORM 일경우)

컨트롤 URI

  • GET, POST만 지원하므로 제약이 있음
  • 이런 제약을 해결하기 위해 동사로 된 리소스 경로 사용
  • 최대한 리소스의 개념을 가지고 URI를 설계하고 정 안될때 컨트롤 URI를 사용
  • POST의 /new, /edit, /delete가 컨트롤 URI
  • HTTP 메서드로 해결하기 애매한 경우 사용(HTTP API 포함) > 최대한 리소스로 URI를 설계하고 되지 않을때 컨트롤 URI를 대체제로 사용

HTTP API - 컬렉션

  • POST 기반 등록
  • 서버가 리소스 URI 결정


    HTTP API - 스토어
  • PUT 기반 등록
  • 클라이언트가 리소스 URI 결정


    HTML FORM 사용
  • 순수 HTML + HTML form 사용
  • GET, POST만 지원


출처
모든 개발자를 위한 HTTP 웹 기본 지식

0개의 댓글