본문 바로가기
스프링 (인프런)/HTTP

HTTP - 2

by 달콤초코꿀딴지 2023. 7. 4.

HTTP 메서드

URI는 리소스만 식별한다.

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

- 리소스 : 회원

- 행위 : 조회, 등록, 삭제, 변경

리소스는 명사, 행위는 동사 (미네랄을 캐라)

 

행위의 구분은 GET, POST 같은 HTTP 메서드로 구분한다.

HTTP 메서드 - GET, POST

GET : 리소스 조회

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

PUT : 리소스를 대체, 해당 리소스가 없으면 생성

PATCH : 리소스 부분 변경 (회원의 이름을 바꾸거나 등등)

DELETE : 리소스 삭제 

GET

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

- 메시지 바디를 사용해서 데이터를 전달할 수 있지만 권장하지 않음

POST

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

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

- 베시지 바디를 통해 들어온 데이터를 처리하는 모든 기능을 수행한다.

EX)

- 입력한 정보로 회원가입, 주문 등에서 사용

- 게시판에 글쓰기, 댓글 달기

- 신규 주문 생성

 

새 리소스 생성, 요청 데이터 처리에 주요 사용됨

PUT

리소스를 완전히 대체 : 파일을 복사한다고 생각하면 된다.

리소스가 없으면 생성

쉽게 이야기해서 덮어버림 갈아치움 (수정하는 것이 아님)

클라이언트가 리소스를 식별

클라이언트가 리소스 위치를 알고 URI를 지정한다.

POST와 차이점이다.

PATCH

리소스를 부분적으로 변경

DELETE

리소스를 삭제

안전

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

따라서 GET, HEAD == 안전하다. POST == 안전하지 않다.

멱등

한 번 호출하든 두 번 호출하든 100번 호출하든 결과가 똑같다.

GET : 몇 번을 조회하든 같은 결과가 조회된다.

PUT : 결과를 대체한다. 따라서 요청을 여러 번 해도 결과는 똑같다.

DELETE : 결과를 삭제한다. 따라서 삭제된 결과는 똑같다.

POST : 멱등이 아니다. 두 번 호출하면 같은 결제가 중복해서 발생할 수 있다.

 

멱등은 외부 요인으로 중간에 리소스가 변경되는 것까지는 고려하지는 않는다.

서버가 정상 응답을 못주었을 때, 클라이언트가 같은 요청을 다시 해도 되는가? 판단 근거

캐시가능

응답 결과 리소스를 캐시 해서 사용해도 되는가?

GET, HEAD, POST, PATCH 캐시사능

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

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

 

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

데이터 전달 방식은 크게 2가지

 

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

GET

주로 정렬 필터 (검색어)

 

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

POST, PUT, PATCH

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

정리

API 설계 예시

회원 관리 시스템 POST 기반 등록

URI는 리소스를 식별해야한다.

ex) "미네랄을 캐다" 에서 미네랄 == 리소스 "캐다"라는 동작은 GET, POST 같은 HTTP 메소드로 구분한다.

 

- 회원 목록 /members => GET

검색, 정렬 등을 쿼리 조건에 넣으면 된다.

- 회원 등록 /members => POST

- 회원 조회 /members/{id} => GET

- 회원 수정 /members/{id} => PATCH, PUT, POST

부분적으로 수정 가능한 PATCH로 하는것이 좋음. 게시물처럼 아예 내용을 초기화하고 다시 올리는 경우 PUT 사용

- 회원 삭제 /members/{id} => DELETE

 

파일 관리 시스템 PUT 기반 등록

- 파일 목록 /files => GET

- 파일 조회 /files/{filename} => GET

- 파일 등록 /files/{filename} => PUT 기존 파일을 삭제하고 등록해야 하기 때문에 PUT 사용

- 파일 삭제 /files/{filename} => DELETE

- 파일 대량 등록 /files => POST 임의로 지정

 

PUT - 신규 자원 등록 특징

- 클라이언트가 리소스 URI를 알고 있어야 한다.

ex) /files/

 

POST로 신규데이터를 등록한다는 것은 클라이언트가 서버에게 요청하는것 == 컬렉션

PUT으로 신규데이터를 등록한다는 것은 클라이언트가 등록될 URI를 알고 관리하는 것 == 스토어 == 클라이언트가 관리하는 리소스 저장소

 

HTML FORM은 POST와 GET만 지원하기 때문에

컨트롤 URI(동사로 된 리소스 경로)를 사용

 HTTP 메서드로 딱 떨어지지 않을 때에도 사용

 

https://restfulapi.net/resource-naming 참고하면 좋다.

 

REST API - URL Naming Conventions

In REST, having a strong and consistent REST resource naming strategy – will prove one of the best design decisions in the long term.

restfulapi.net

 

정리

 

'스프링 (인프런) > HTTP' 카테고리의 다른 글

HTTP -3  (0) 2023.07.05
HTTP  (0) 2023.06.29