본문으로 바로가기

https://www.inflearn.com/course/http-%EC%9B%B9-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC/

 

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

실무에 꼭 필요한 HTTP 핵심 기능과 올바른 HTTP API 설계 방법을 학습합니다., 웹 기술을 사용하는 개발자라면 누구나 OK!꼭 필요한 HTTP의 핵심을 알려드립니다. 📣 확인해주세요!본 강의는 자바 스

www.inflearn.com

ㅁ HTTP 메서드

ㅇHTTP API를 만들어보자

- API URI 고민

> 가장 중요한건 리소스

> 리소스를 어떻게 식별하는게 좋을까?

  > ex) 회원 목록조회, 회원 등록, 회원 수정 -> 회원!

> 계층 구조상 상위를 컬렉션으로 보고 복수단어 사용 권장

> URI는 리소스만 식별

> 리소스와 해당 리소스를 대상으로 하는 행위를 분리

> 리소스는 명사, 행위는 동사

 

ㅇ HTTP 메서드 - GET , POST

- GET

 > 리소스 조회

 > 서버에 전달하고 싶은 데이터는 query (쿼리 파라미터, 쿼리 스트링)를 통해서 전달

 > 메시지 바디를 사용해서 데이터를 전달할 수 있지만, 지원하지 않는 곳이 많아서 권장하지 않음

- POST

 > 요청 데이터 처리

 > 메시지 바디를 통해 서버로 요청 데이터 전달

 > 서버는 요청 데이터를 처리

- 요청 데이터를 어떻게 처리한다는 뜻일까? 

 > POST 메서드는 대상 리소스가 리소스의 고유 한 의미 체계에 따라 요청에 포함 된 표현을 처리하도록 요청

 > 이 리소스 URI에 POST 요청이 오면 요청 데이터를 어떻게 처리할지 리소스마다 따로 정해야 함 -> 정해진 것이 없음

 

- POST 정리

1. 새 리소스 생성 (등록)

2. 요청 데이터 처리 - 컨트롤 URI (ex ) /orders/{orderId}/start-delivery )

3. 다른 메서드로 처리하기 애매한 경우

 

ㅇ HTTP 메서드 - PUT, PATCH, DELTE

- PUT

> /members/100 으로 요청

> 리소스를 완전히 대체 ( 쉽게 이야기해서 덮어 버림 - 기존 데이터 삭제 ) 

> 리소스가 없으면 생성

- PATCH

> 리소스 부분 변경

- DELETE

> 리소스 제거

ㅇ HTTP 메서드 속성

- 안전함

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

- 멱등

> POST 만 멱등이 아님

- 캐시가능

> GET, HEAD, POST, PATCH 캐시 가능

 - 실제로는 GET, HEAD 정도만 캐시로 사용

 - POST, PATCH는 본문 내용까지 캐시 키로 고려해야 하는데, 구현이 쉽지 않음

 

ㅁ HTTP 메서드 활용

ㅇ 클라이언트에서 서버로 데이터 전송

- 쿼리파라미터를 통한 데이터 전송

 > GET, 주로 정렬 필터(검색어)

- 메시지 바디를 통한 데이터 전송

 > POST, PUT, PATCH

 > 회원 가입, 상품 주문, 리소스 등록, 리소스 변경

 

HTML Form 데이터 전송

- HTML Form submit시 POST 전송

- Content-Type: application/x-www-form-urlencoded 사용

 > form의 내용을 메시지 바디를 통해서 전송 ( key= value, 쿼리 파라미터 형식 )

 > 전송 데이터를 url encoding 처리 (UTF-8 형식)

- HTML Form 은 GET 전송도 가능 - 정렬이나 조건 검색시 (사용하지 않는게 좋음)

- Content-Type: multipart/form-data

 > 파일 업로드 같은 바이너리 데이터 전송시 사용

 > 다른 종류의 여러 파일과 폼의 내용과 함께 전송 가능 (그래서 이름이 multipart)

- 참고: HTML Form 전송은 GET, POST 만 지원

 

HTTP API 데이터 전송

- 서버 to 서버 

- 앱 클라이언트 : 아이폰, 안드로이드

- 웹 클라이언트 : HTML 에서 Form 전송 대신 자바스크립트를 통한 통신에 사용 (AJAX)

- POST, PUT, PATCH: 메시지 바디에 데이터를 전송

 

ㅇ HTTP API 설계 예시

- PUT을 통한 등록과 POST를 통한 등록의 차이

 > PUT을 통한 등록시, 등록될 리소스의 URI를 지정해줘야함 (ex ) /items/{itemId}, /files/star.jpg )
    -> 스토어 방식 ( 클라이언트가 리소스의 URI를 알고 관리)

 > POST -> 컬렉션 방식 

 - 컨트롤 URI를 통해 동사를 직접 사용하여 URI에 표시하여, 리소스를 다룸