HTTP 메소드
포스트
취소

HTTP 메소드

HTTP 메소드란?

  • 클라이언트가 서버에 요청할 때 사용하는 동작을 명시하는 코드
  • 클라이언트가 지정하는 서버가 수행해야 할 동작에 대한 방식

GET

  • 역할
    • 서버로부터 특정 리소스를 요청하는 메소드
    • 서버에 전달하고 싶은 데이터는 query(쿼리 파라미터, 쿼리 스트링)를 통해서 전달한다.
    • 메시지 바디를 사용해서 데이터를 전달할 수 있지만, 지원하지 않는 곳이 많아서 권장하지 않는다.
  • 특징
    • 안전성
      • 리소스 상태를 변경하지 않는다.
    • 멱등성
      • 같은 요청을 반복해도 결과가 동일하다.
    • 캐싱 가능
      • 응답 결과를 캐싱하여 재사용할 수 있다.
    • 요청 본문
      • 없다.
      • 정확하게는 서버에서 지원하지 않는다면 없다.
    • 응답 본문
      • 요청된 리소스의 데이터

POST

  • 역할
    • 서버에 새로운 리소스를 생성하거나 기존 리소스에 데이터를 추가한다.
    • 메시지 바디를 통해 들어온 데이터를 처리하는 모든 기능을 수행한다.
    • JSON으로 조회 데이터를 넘겨야 하는데, GET 메서드를 사용하기 어려운 경우에 대신 사용하기도 한다.
  • 특징
    • 안전성
      • 리소스 상태를 변경할 수 있다.
    • 멱등성
      • 일반적으로 멱등하지 않는다.
      • 같은 요청을 반복하면 리소스가 중복 생성될 수 있다.
    • 캐싱 가능
      • 일반적으로 캐싱 불가능하다.
    • 요청 본문
      • 추가할 데이터
    • 응답 본문
      • 생성된 리소스 정보 또는 성공/실패 메시지

PUT

  • 역할
    • 서버에 존재하는 리소스를 전체적으로 변경하거나 새 리소스를 생성한다.
    • 기존 리소스가 있으면 기존 리소스 대신에 신규 리소스로 완전히 교체한다. (= 덮어쓰기)
    • 기존 리소스가 없으면 신규 리소스를 생성한다.
  • 특징
    • 안전성
      • 리소스 상태를 변경한다.
    • 멱등성
      • 멱등성을 지향하지만, 특정 상황에서는 멱등하지 않을 수 있다.
    • 캐싱 가능
      • 일반적으로 캐싱 불가능하다.
    • 요청 본문
      • 변경할 리소스의 전체 데이터
    • 응답 본문
      • 변경된 리소스 정보 또는 성공/실패 메시지

PATCH

  • 역할
    • 서버에 존재하는 리소스의 일부를 변경한다.
  • 특징
    • 안전성
      • 리소스 상태를 변경한다.
    • 멱등성
      • 멱등성을 지향하지만, 특정 상황에서는 멱등하지 않을 수 있다.
    • 캐싱 가능
      • 일반적으로 캐싱 불가능하다.
    • 요청 본문
      • 변경할 리소스의 일부 데이터
    • 응답 본문
      • 변경된 리소스 정보 또는 성공/실패 메시지

DELETE

  • 역할
    • 서버에 존재하는 리소스를 삭제한다.
  • 특징
    • 안전성
      • 리소스 상태를 변경한다.
    • 멱등성
      • 멱등성을 지향하지만, 특정 상황에서는 멱등하지 않을 수 있다.
    • 캐싱 가능
      • 일반적으로 캐싱 불가능하다.
    • 요청 본문
      • 없음
    • 응답 본문
      • 삭제 성공/실패 메시지

그 외 메소드

  • OPTIONS
    • 서버가 지원하는 HTTP 메소드를 확인한다.
  • HEAD
    • GET 메소드와 동일한 역할을 한다.
    • 응답 메시지에 본문은 포함되지 않는다.
  • CONNECT
    • 서버와 클라이언트 사이에 터널을 연결한다.
  • TRACE
    • 요청 메시지를 따라서 서버에서 클라이언트까지 전달하는 경로를 추적한다.

HTTP 메서드의 속성

  • 안전 (Safe Methods)
    • 호출해도 리소스를 변경하지 않는다.
    • 안전은 해당 리소스만 고려한다.
    • 로그같은게 쌓여서 장애가 발생하는 경우 등의 예외 사항은 고려하지 않는다.
  • 멱등 (Idempotent Methods)
    • 몇 번을 호출해도 결과가 동일하다.
    • 예시
      • GET
        • 한 번 조회하든, 두 번 조회하든 같은 결과가 조회된다.
      • PUT
        • 결과를 대체한다.
        • 같은 요청을 여러번 해도 최종 결과는 같다.
      • DELETE
        • 결과를 삭제한다.
        • 같은 요청을 여러번 해도 삭제된 결과는 똑같다.
      • POST
        • 멱등이 아니다.
        • 여러 번 호출하면 같은 결제가 중복해서 발생할 수 있다.
  • 캐시 가능 (Cacheable Methods)
    • 응답 결과 리소스를 캐시해서 사용해도 되는지에 대한 여부
    • GET, HEAD, POST, PATCH가 캐시를 사용해도 된다.
    • 실제로는 GET, HEAD 정도만 캐시로 사용한다.
    • POST, PATCH는 본문 내용까지 캐시 키로 고려해야 하는데, 구현하기가 쉽지 않다.

HTTP API 설계

  • API의 주체가 되는 대상을 리소스로 정의하고, 해당 리소스를 기준으로 정의한다.
  • 만약 회원에 대한 CRUD를 실행하는 API를 각각 만들게 된다면 해당 API들의 리소스는 회원이 된다.
  • API URI를 설계할 때는 리소스를 기준으로 작성한다.
    • 회원 : members, 이벤트 : events, …
  • 계층 구조상 상위를 컬렉션으로 보고 복수형을 사용하는 것을 권장한다.
    • 회원일 경우 member가 아닌 members를 사용하는 것을 권장한다.
  • 리소스와 행위을 분리한다.
    • 리소스는 명사, 행위는 동사
    • 예시
      • 리소스 : 회원
      • 행위 : 조회, 등록, 삭제, 변경
  • URI 설계 개념
    • 문서 (document)
      • 단일 개념 (파일 하나, 객체 인스턴스, 데이터베이스 row)
      • 예시 : /members/100, /files/star.jpg
    • 컬렉션 (collection)
      • 서버가 관리하는 리소스 디렉터리
      • 서버가 리소스의 URI를 생성하고 관리
      • 예시 : /members
    • 스토어(store)
      • 클라이언트가 관리하는 자원 저장소
      • 클라이언트가 리소스의 URI를 알고 관리
      • 예시 : /files
    • 컨트롤러(controller), 컨트롤 URI
      • 문서, 컬렉션, 스토어로 해결하기 어려운 추가 프로세스 실행
      • 동사를 직접 사용한다.
      • 예시 : /members/{id}/delete

출처

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.