HTTP 메서드

5o_hyun·2023년 1월 3일
0
post-thumbnail

API URI 설계

요구사항을 받으면 -> API URI설계

  • 회원목록조회 /read-member-list
  • 회원 조회 /read-member-by-id
  • 회원 등록 /create-member
  • 회원 수정 /update-member
  • 회원 삭제 /delete-member

위와 같은 api는 좋은 예시가 아님 리소스와 행위를 분리하는 것이 좋다.
( 리소스 : 회원 / 행위 : 조회,등록,수정, 삭제 )

[ 리소스 식별, URI 계층 구조 활용한 예시 ]

  • 회원목록조회 /members
  • 회원 조회 /members/{id}
  • 회원 등록 /members/{id}
  • 회원 수정 /members/{id}
  • 회원 삭제 /members/{id}

모두 URL은 동일하지만 하는 행위를 다르게 하면 다른 기능을 수행한다.

HTTP 메서드

클라이언트가 서버에 뭔가 요청을 할 때 기대하는 행동

  • GET : 리소스 조회
  • POST : 요청 데이터 처리, 주로 등록에 사용
  • PUT : 리소스 대체, 없으면 생성
  • PATCH : 리소스 부분 변경
  • DELETE : 리소스 삭제
  • HEAD : GET과 동일한데 Meta 정보만을 요청 ( body제외 )
  • OPTIONS : 요청한 URI 에 어떤 메소드가 가능한지 질문. 주로 CORS에서 사용

주로 데이터의 CRUD 를 위해 사용하며,
Create(생성) 에는 POST 메소드를,
Read(읽기) 에는 GET 메소드를,
Update(수정) 에는 PUT 메소드를,
Delete(삭제) 에는 DELETE 메소드를 이용합니다.

GET

  • 리소스 조회
  • 서버에 전달하고 싶은 데이터는 쿼리스트링을 통해서 전달

POST

  • 새 리소스 생성
  • 메시지 바디를 통해 서버로 요청 데이터 전달
  • 요청 데이터 처리
    메시지 바디에 있는 데이터의 모든 기능을 처리
    단순히 데이터를 생성,변경이 아니라 프로세스를 처리해야하는경우
    ( 결제완료 -> 배달시작 -> 배달완료 : 프로세스 상태가 변경되는 경우 )
  • 다른 메서드로 처리하기 애매한 경우
    ex ) JSON으로 조회 데이터를 넘겨야하는데, GET메서드로 조회하기 어려운경우.. 애매하면 POST

PUT

  • 리소스를 완전히! 대체
  • 클라이언트가 리소스의 위치를 알고 URI지정

PATCH

  • 리소스를 부분 변경

DELETE

  • 리소스를 삭제

HTTP 메서드의 속성

1. 안전(safe)

호출해도 리소스를 변경하지 않는다.

2. 멱등(Idempotent)

한 번 호출하든 두 번 호출하든 100번 호출하든 결과가 똑같다.
GET : 몇번 조회해도 최종 결과는 똑같다.
PUT : 같은 데이터를 몇번 대체해도 최종 결과는 똑같다.
DELETE : 여러번 삭제해도 이미 그 데이터는 삭제됬다. 최종 결과는 똑같다.
멱등이 아닌것 : POST ( 결제를 두번 호출하면 안됨 )

재요청 중간에 다른곳에서 리소스를 변경해버리면 멱등이아닌가?
사용자1 : GET -> userAge:20
사용자2 : PUT => userAge:30
사용자3 : GET -> userAge:30 -> 바뀐데이터
-> 멱등은 외부 요인으로 중간에 리소스가 변경되는것까지는 고려하지않는다.

3. 캐시가능(Cacheable)

  • 가능한 목록 : GET, HEAD, POST, PATCH -> 구현쉽지않은것들도있음
  • 실제 사용 목록 : GET
profile
학생 점심 좀 차려

0개의 댓글