본문 바로가기

코딩/네트워크

[HTTP] HTTP 메세지 & API URI 설계 방법

HTTP 메세지는 아래와 같은 구조로 만들어진다

Start-line 시작 라인
Header 헤더
empty line 공백 라인 (CRLF)
Message Body

또, HTTP 메세지는 크게 요청 / 응답 두 가지 경우로 나눌 수 있다.

 

HTTP Message 가 어떻게 구성되는지 자세히 살펴보자.

 

1. Start-Line

Start-line 은 요청, 응답 메시지에서 차이가 있다.

 

-HTTP 요청 메세지

Start-line = Request-line

-> method (공백) request-target (공백) HTTP-version (엔터)

 

- method : HTTP 메서드, 어떤 동작을 할 것인지 (종류 : GET, POST, PUT, DELETE..)

- request-target : 요청 대상, 절대경로?쿼리 형태

- HTTP version

 

-HTTP 응답 메세지

Start-line = Status-line

-> HTTP-version (공백) status-code (공백) reason-phrase (엔터)

 

-HTTP version

- status-code : HTTP 상태 코드, 요청 성공 or 실패를 나타냄

- reason-phrase : 이유 문구, 사람이 이해할 수 있는 짧은 상태 코드 설명 글

 

2. Header

HTTP 전송에 필요한 모든 부가정보가 담겨있음.

ex) 메세지 바디의 내용, 크기, 압축 방식, 인증, 브라우저 정보, 서버 애플리케이션 정보, 캐시 관리 정보 등..

 

Content-Type: text/html;charset=UTF-8

Content-Length: 3321

 

3. Message Body

실제 전송할 데이터!

 

 

URI 설계하기

URI 설계에서 가장 중요한 것은 리스소 식별이다.

리소스를 식별하는 방법 : 동사가 아니라 명사에 집중?

ex) 회원을 등록한다 --> '등록' 이 아니라 '회원' 이 리소스이다.

즉 회원 등록, 수정, 조회 URI를 설계할 때 모두 '회원'이라는 리소스만 식별하면 된다.

회원 조회 /members/{id}

회원 등록 /members/{id}

회원 수정 /members/{id}

회원 삭제 /members/{id}

이런 식으로 설계!

 

그렇다면 네 가지 기능을 어떻게 구분할까?

HTTP start-line 에 있는 메서드로 구분한다

 

HTTP 메서드

- GET: 리소스 조회

- POST : 요청 데이터 처리, 주로 등록에 사용

- PUT : 리소스를 대체, 해당 리소스가 없으면 생성 (주의 : 리소스를 완전히 대체해 버림!!)

- PATCH : 리소스 부분 변경

- DELETE : 리소스 삭제

 

GET

리소스를 조회할 때 사용하는 메서드

서버에 전달하고 싶은 데이터는 query를 통해서 전달한다.

ex) GET /search?q=coding&hl=ko HTTP/1.1

 

POST

메세지 바디를 통해 서버로 데이터를 전달

서버는 요청 데이터를 처리한다.

이때 처리하는 방법은 서버에서 정할 수 있다! 주로 신규 리소스 등록, 프로세스 처리에 사용

주의점! 신규 리소스 식별자를 서버에서 만들어 부여한다!

ex) 요청 : POST /members HTTP/1.1 + 데이터

      응답 :  HTTP/1.1 201 Created

                 Location: /members/123

이런 식으로 응답에서는 데이터를 보내며 요청만 하지 식별자를 주지 않지만, 서버에서 식별자 (/123)을 생성해 저장한다.

물론 처리하는 방법에 따라 새로운 식별자를 생성하지 않고 처리만 할 수 도 있다.

 

PUT

리소스가 있으면 대체, 없으면 생성. 즉 덮어쓰기.

POST와 다르게 클라이언트 요청에서 URI를 지정해야 함!

이 메서드는 덮어쓰기로 새로운 데이터와 기존 데이터의 형식이 달라도 그냥 덮어버린다

즉 부분만 수정이 불가능

 

PATCH

리소스를 부분 수정할 때 사용