녕의 학습 기록

[HTTP] HTTP 메서드 활용 본문

Dev/HTTP

[HTTP] HTTP 메서드 활용

kjyyjk 2022. 12. 25. 20:11

 학습 내용 

서버로 데이터 전송, HTTP API 설계 시 HTTP 메서드 활용


* 클라이언트 -> 서버 데이터 전달 방식

 

클라이언트에서 서버로 데이터를 전송하는 방식으로는

 

쿼리 파라미터를 통한 전송(GET) / 메시지 바디를 통한 전송(GET 외에) 두가지가 있다.

 

- 정적 데이터 조회

이미지나 정적 텍스트 문서와 같은 정적 데이터를 조회할 때에는 단순히 URI의 리소스 경로만으로 조회 가능하다.

즉, GET메서드를 통해 조회하지만 쿼리 파라미터를 통한 데이터 전송을 할 필요가 없다.

 

- 동적 데이터 조회

쿼리 파라미터를 사용해서 데이터를 전달.

서버는 쿼리 파라미터를 기반으로 결과를 동적으로 생성한다.

주로 검색어를 통해 조회 조건을 줄여주는 필터나, 조회 결과를 정렬하는 조건에서 사용된다.

 

 

어쨌거나 조회 시에는 GET 사용

 

- HTML Form

HTML의 <form> 태그를 통해서도 데이터를 전송할 수가 있다.

 

form 태그의 양식에 값을 입력하고 전송 버튼을 누르면 웹 브라우저가 값을 읽고 요청 메시지를 생성한다.

 

key=value 형식

<input type="text" name="age"/>

input에 23 입력 시

요청 메시지에는 age=23 이런 식으로 데이터가 생성됨

그렇다면 form 태그를 통해 데이터를 전송할 때는 데이터를 어디에 담아 전송할까..?

 

메서드마다 다르다.

 

form 태그가 가질 수 있는 메서드는 POST와 GET  두 가지이다.

 

당연하게 POST 일 때는 메시지 바디, GET 일 때는 쿼리 파라미터를 통해 데이터를 전송한다.

 

 

form 태그에서 파일을 전송하는 경우

위와 같이 byte로 표현되는 파일을 전송할 때는 multipart/form-data를 통해 여러 컨텐트 타입을 보낸다.

 

이 경우 생성되는 요청 메시지는 다음과 같다.

 

여러 타입으로 나누어 생성

 

- HTTP API 데이터 전송

content type으로 application/json 을 주로 사용한다.

 

 

* HTTP API 설계 - 컬렉션

 

앞에서 POST 메서드를 통해 데이터 등록 시 서버가 리소스 식별자를 생성한 다는 것을 학습했다.

 

즉 클라이언트는 등록될 리소스의 URI를 모른다는 것.

-> ( POST/members ) 

 

서버가 리소스 URI 생성

-> (/members/100)

 

이런 형식을 컬렉션(Collection)이라고 한다.

 

컬렉션은 서버가 관리하는 리소스 디렉토리로, 서버가 리소스의 URI를 생성하고 관리하는 특징을 가진다.

 

개발 시에 주로 사용하는건 스토어 보다는 컬렉션.

 

위 예시에서는 /members가 컬렉션이다.

 

* HTTP API 설계 - 스토어

 

POST와는 달리 PUT 메서드를 통해 리소스를 등록할 때는 클라이언트가 리소스의 URI를 알고 있어야 한다.

(그래야 해당 리소스 경로에 데이터가 있으면 덮고 없으면 새로 생성하기 때문)

 

ex) PUT/files/star.jpg

클라이언트가 star.jpg를 식별하고 직접 등록했다. 당연히 해야함.

 

이러한 형식을 스토어(Store)라고 한다.

 

스토어는 클라이언트가 관리하는 리소스 저장소로, 클라이언트가 직접 리소스의 URI를 알고 관리해야한다.

 

위 예시에서 스토어는 /files 다.

 

* 컨트롤 URI

 

HTML FORM은 GET과 POST만 지원한다고 했다.

 

이는 정보를 수정하고 삭제하고 등 URI 설계에 있어 큰 제약이 된다.

 

이러한 제약을 해결하기 위해 사용하는 것이 바로 컨트롤 URI 다.

 

컨트롤 URI는 동사로 된 리소스 경로를 사용하는 것을 말한다.

 

예를 들면

POST /members/{id}/edit     -> URI에 edit와 같은 동사가 사용됐다.

 

앞에서는 동사 사용은 권장하지 않았다.

 

그렇지만 URI를 리소스로만 식별해서는 절대 깔끔하게 맞아 떨어지지 않는다.

 

그렇기 때문에 컬렉션과 문서(단일개념)를 통해 최대한 해결해보고 안될 시에 컨트롤 URI를 사용해야한다. 

 


 다음 학습 내용 

 

HTTP 상태 코드

 

모든 개발자를 위한 HTTP 웹 기본 지식 - 인프런 | 강의

실무에 꼭 필요한 HTTP 핵심 기능과 올바른 HTTP API 설계 방법을 학습합니다., - 강의 소개 | 인프런...

www.inflearn.com

 

'Dev > HTTP' 카테고리의 다른 글

[HTTP] HTTP 헤더 (1)  (1) 2022.12.29
[HTTP] HTTP 상태코드  (0) 2022.12.27
[HTTP] HTTP 메서드  (0) 2022.12.25
[HTTP] HTTP 기본  (0) 2022.12.23
[HTTP] URI 와 웹의 흐름  (0) 2022.12.21