HTTP method

요구사항 확인

  1. 맨처음 백엔드 개발을 시작할 때,

해야할 일은 요구사항 확인이다.
만들고자 하는 서비스에 어떤 기능이 있어야하는지를 생각하고 정리한다.

우선 이번 서비스의 요구사항은 아래와 같다고 예를 든다.

- 회원 목록 조회
- 회원 조회
- 회원 등록
- 회원 수정
- 회원 삭재

API URI 설계

인터넷에서 어떻게 식별할 것인지를 정한다.
이 말은 아래와 같은 패치를 정하는 것과도 같다.
http/들어가고 port번호 등은 이미 정해져있기 때문에 우리는 뒤에 패치를 사용해서 인터넷 주소를
만들어야 한다.

path
: 리소스 경로, 계층적 구조
/home/file.jpg
/members
/members/10

1)기능에 따라 URL을 만든다.

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

=> 좋은 URI 인가 고민해보자.

API URI 고민

URI(Uniform Resource Identifier)
리소스를 식별하는 통합된 방법이다.

  • "그렇다면 리소스의 의미는 뭘까?"
    수달이를 만나라 -> 수달이 리소스

그렇다면 우리가 하려는 서비스에서의 리소스는?
회원이다.

리소스는 어떻게 식별하면 좋을까?
회원을 등록, 수정,조회는 일단 배제하고
-회원이라는 리소스만 식별해라. -> 회원만 URI에 먼저 맵핑

2)리소스를 중심으로 URL을 만든다.

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

=> 조회 등록 수정, 삭제는 구분할 수 없는 오류가 생긴다.

그래서 uri어떻게 설계하라는건지??

바로

리소스와 행위를 분리할 것.

가장 중요한 것은 리소스를 식별하는 것이기 때문에

  • URI는 리소스만 식별하고,
  • 리소스와 해당 리소스를 대상으로 하는 행위를 분리한다.

리소스 : 회원

행위 : 조회, 수정, 삭제, 변경

그럼 행위는 어떻게 표현할 건지 알아보자.

HTTP 메소드 종류


주로 사용되는 메소드

GET : 리소스를 조회
POST : 요청 데이터를 처리, 주로 등록
PUT : 리소스를 보내는데,그 리소스가 있으면 대체하고, 없으면 생성한다.
파일을 -> 폴더에 넣음, 기존에 폴더안에 같은 파일이 있으면 대체하고,
없으면 그냥 들어가서 생성되는 것과 같음
PATCH : 리소스를 부분 변경 (회원 이름을 변경)
DELETE : 리소스를 삭제



기타 메소드

HEAD : get이랑 동일한데, 메세지 부분만 제외하고 상태랑 헤더만 반환한다.
OPTIONS : 대상 리소스에 대한 통신 가능 옵션을 설명 (cors에서 사용)


GET (주세요)

  • 리소스를 조회할 때 주로 쓰임
  • 서버에 전달하고 싶은 데이터는 쿼리 파라미터를 통해서 전달한다.

get/members/100 HTTP/1.1
host: www.google.com
만약에 이렇게 왔다면,

서버가 get을 보자마자 아 뭘 달라고 하는구나, members에 100번을 . 이라고 이해해서
디비에서 값을 꺼내서 응답 메세지에 넣어서 보내준다.

POST

  • 요청 데이터를 처리한다.
  • 메세지 바디를 통해서 서버로 요청한 데이터를 전달한다.

POST/members/100 HTTP/1.1
Content-Type:application/json
{
"username":"hello"
"age" : 20
}

서버가 post 를 보면 아 요청하는 거구나 알고, 내용을 보니 유저네임과 나이를 클라이언트가
줬으니 서버가 받아서 처리해줘. 라고 하는 것이다.

주로 등록을 하거나 수정을 하는데 쓰인다.

클라이언트가 members에 post method로 보내면 그 데이터는 내가 데이터 베이스에
저장할거야 ~ 와 같은 약속을 한다. 그리고 신규로 등록을 한다.
등록을 하면 식별자를 생성한다.


이런 서로의 약속을 한다.

신규로 자원이 생성되는 http code 가 201으로 보낸다.
Location 은 신규로 생성된 자원의 경로를 보내준다.

그런데 post 는 등록 외에도 수정을 한다던가, 자원을 추가한다던가 다른 기능들을 수행할 수 있기 때문에
리소스 마다 어떻게 처리할 것인지 정해야한다.

역할을 정리하자면

1.리소스 생성(등록)

  • 아직 식별되지 않은 새 리소스를 생성한다.

2. 요청 데이터를 처리한다.

  • 단순히 데이터를 생성하거나, 변경하는 것 외에도 프로세스를 처리해야하는 경우가 있다.
    예) 주문에서 결제완료 >배달시작>배달완료 처럼 상태가 변경되는 경우

3. 다른 메서드로 처리하기 애매할 때

json으로 조회 데이터를 넘겨야 하는데, get 메소드로 사용이 어려운 경우
애매하면 post로 보낸다.

동사 URI 를 컨트롤 URI라고 한다.

profile
짜장면 쟁이

0개의 댓글

Powered by GraphCDN, the GraphQL CDN