- HTTP 메서드
- URI 설계에서 가장 중요한 것은 리소스 식별이다.
- 리소스와 행위를 분리 → 리소스 : 목적어, 행위 : 동사
- GET : 리소스 조회
- POST : 요청 데이터 처리, 주로 등록에 사용
- PUT : 리소스를 대체, 해당 리소스가 없으면 생성
- PATCH : 리소스 일부 변경
- DELETE : 리소스 삭제
- HEAD : GET과 동일하지만 메세지바디 제외 헤더만 요청
- OPTIONS, CONNECT, TRACE … 생각보다 다양하다
- GET
- 서버에 전달하고 싶은 데이터는 쿼리를 통해 전달
- 메시지 바디를 사용해서 데이터를 전달할 수 있지만, 실무에서는 메시지 바디 사용하지 않음(지원하지 않는 서버가 많다)
- 조회할 때는 GET 사용하는게 유리, 캐싱이 가능하다. POST는 캐싱이 어려움
- POST
- 주로 신규 데이터 등록, 변경된 프로세스 수정에 사용
- 신규 생성시 응답 데이터 (201 CREATED, Location : path, 등록된 데이터)
- 사용 예시 : 회원가입, 게시판 글쓰기, 댓글 달기, 신규 주문 생성, 기존 데이터 수정
- 프로세스를 처리하는 경우에 사용 - 다음 데이터 프로세스를 처리하는 단계에서 사용한다.
- POST의 결과로 새로운 리소스가 생성되지 않는 경우도 있다.
- 컨트롤 URI(동사형 URI)를 사용하기도 한다.
- 다른 메서드로 처리하기 애매한 경우 (GET 메서드에 메시지 바디를 넣고싶은데 서버에서 지원하지 않을 때)
- 애매하면 POST
- PUT
- 생성 혹은 존재한다면 기존 파일 덮어쓰기
- 클라이언트가 리소스를 지정(식별)한다. - POST와의 차이
- 데이터 필드가 작성되지않으면 그 데이터 모두 사라짐 → 완전 대체
- PATCH
- 리소스 부분 변경
- 데이터 필드 작성 안 해도 기존의 데이터 필드가 존재하면 유지
- 지원 안되는 서버일 경우 POST
- HTTP 메서드 속성
- 안전 : 호출시 변경발생 안함
- 멱등(Idempotent) : 한번 호출하든 n번 호출하든 결과가 같다. (Y) GET,PUT,DELETE /(N) POST
- 멱등 활용하는 이유 : 서버가 오류났을 때, 클라이언트가 같은 요청을 다시 해도 결과가 같길 원할 때
- 외부요인으로 리소스가 변경될 때 다른 결과값이 나오는 것은 멱등의 판단 기준에 들어가지 않는다.
- 캐시가능 Cacheable : 실제는 GET(url만 잡으면 됨), HEAD만 캐시 사용 POST, PATCH는 본문 내용까지 캐시키로 고려해야해서 구현 어려움
- HTTP 메서드 활용
- 클라이언트에서 서버로 데이터 전송
- 쿼리 파라미터 → GET, 주로 정렬필터(검색어)
- 메시지 바디→ POST, PUT, PATCH 회원가입, 상품주문, 리소스 등록, 리소스 변경
- 상황
- 정적데이터 조회- 추가데이터 전달 없음(쿼리 파라미터 없음). URL 경로만 전송, 이미지, 정적 텍스트 문서
- 동적 데이터 조회- 데이터 전달함, 쿼리 파라미터에 따라 결과가 동적으로 생성된다. 검색, 게시판 목록 조회 GET
- HTML Form을 통한 데이터 전송
- POST : Form 태그내부의 input box에 데이터를 입력하면 입력한대로 데이터가 전송됨.(Content-Type : application/x-www-from-urlencoded) POST
- GET : Form 태그 내부의 데이터를 쿼리 파라미터로 보냄
- enctype = ”multipart/form-data” Content-Type=multipart/form-data;boundary=—XXX, boundary가 각 데이터를 구분함, 주로 파일 업로드에 사용
- HTTP API를 통한 데이터 전송
- 서버에서 서버로 통신할때 사용, 아이폰, 안드로이드에서 전송할때 주로 사용
- Form대신에 자바스크립트를 통한 통신에 사용한다.
- POST, PUT, PATCH : 메시지 바디로 데이터 전송
- GET : 쿼리 파라미터로 데이터 전송
- Content-Type : application/json 을 주로 사용 (사실상 표준)
- HTTP API 설계 예시
- 클라이언트에서 서버로 데이터 전송
[HTTP] HTTP 메서드
This post is licensed under CC BY 4.0 by the author.
Comments powered by Disqus.