♪ 학습 내용
HTTP API 개발 및 HTTP 메서드
* URI 설계
처음 URI 설계 시에는 많은 사람들이 다음과 같이 설계하고는 한다.
회원 목록 조회 = /read-member-list
회원 등록 = /create-member
위 설계는 동사, 행위로 URI를 식별하고 있다. read 인지 create인지 delete인지 등등.
(좋은 방법이 아니다.)
가장 좋은 방법은 리소스로 식별하는 것.
동사가 아닌 명사로 식별. '미네랄을 캐라' 에서 '캐라' 가 아닌 '미네랄' 이 리소스.
위의 설계에서 리소스는 '회원', member 이다.
때문에 동사는 다 배제하고 명사인 리소스만으로 URI에 매핑해 식별해야 한다.
[ 리소스: 회원 ] / [ 행위: 조회, 등록, 삭제, 변경 ] 로 나눠짐.
그렇다면 행위는 어떻게 구분할 것인가?
HTTP 메서드를 통해 행위를 구분할 수 있다.
* HTTP 메서드
HTTP 메서드로는 다음과 같이 여러 종류가 있다.
(GET / POST / PUT / PATCH / DELETE 등등 )
- GET
리소스 조회 시에 사용하는 메서드
조회 시에도 클라이언트가 서버로 데이터를 전송할 수 있는데, 주로 쿼리 파라미터를 통해 전달한다.
(메시지 바디에 담아 전송도 가능하지만 지원하지 않는 곳이 많다)
ex) HTTP 요청 메시지 : GET / members / 100
-> 쿼리 파라미터로 members/100 을 넘기고 GET메서드를 통해 해당 경로의 데이터를 조회
- POST
내가(클라이언트) 데이터를 줄테니까 서버. 너가 처리해줘의 의미이다.
GET 메서드에서는 쿼리파라미터를 통해 데이터를 전달했지만 POST는 메시지 바디를 통해 전달한다.
만약 신규 데이터라면 서버가 새 리소스 식별자를 생성하고 그 경로를 응답 메시지에 담아 보내준다.
(이 경우에 클라이언트는 리소스 식별자(경로)를 기존에 모를 수 밖에 없다. 서버가 생성해주니)
다른 메서드로 처리하기 애매할 경우에는 POST 메서드를 사용하면 된다.
- PUT
해당 리소스가 있으면 서버가 완전히 대체하고, 없으면 생성한다.
이를 위해서는 클라이언트가 리소스 위치를 알고 있고, URI를 지정해야 한다.
POST와의 차이. (POST 에서는 클라이언트가 리소스 식별하지 못함)
URI의 리소스 위치에 리소스가 있으면 완전히 덮어써버린다.
-PATCH
PUT메서드에서는 완전히 덮어써버리지만, PATCH 메서드를 이용하면 부분 수정 가능!!
-DELETE
해당 경로의 리소스를 완전히 제거한다.
* HTTP 메서드의 속성
- 안전
메서드를 호출해도 리소스를 변경하지 않는 경우를 말한다.
위에서 살펴본 메서드 중 GET(조회)이 해당.
외의 메서드는 모두 리소스를 변경하기에 해당하지 않는다.
- 멱등
한번 호출하든, 여러번을 호출하든 결과가 똑같은 경우를 말한다.
GET(조회)시에 결과가 똑같은건 당연!
PUT도 처음 호출 시 새로 생성할 지 몰라도, 계속 호출하면 그냥 덮어쓰기만 한다. 결과는 똑같음.
DELETE도 한번 제거하면 여러번 호출해도 결과는 같다.
결과가 같기 때문에 서버가 정상적으로 응답하지 못하는 상황이 생겼을 때 같은 요청을 여러번 해도 상관없다.
결과가 같으니.
단, POST는 멱등이 아님!! 서버가 리소스 식별자를 생성하기 때문에 중복 호출 시에 중복 발생할 수 있다.
- 캐시 가능
응답 결과 리소스를 캐시 메모리에 저장하고 있다 사용해도 되는가?
여러 메서드가 캐시 가능하지만, 실제로는 GET, HEAD 정도만 캐시 사용한다고 한다.
여러 HTTP 메서드를 알아봄으로써 URI 설계 시에 행위가 아닌 리소스(명사)로 식별할 수 있게 되었다.
중요한 것은 좋은 URI 설계를 위해서는 리소스 식별을 해야한다는 것..!
♪ 다음 학습 내용
HTTP 메서드 활용
'Dev > HTTP' 카테고리의 다른 글
[HTTP] HTTP 상태코드 (0) | 2022.12.27 |
---|---|
[HTTP] HTTP 메서드 활용 (0) | 2022.12.25 |
[HTTP] HTTP 기본 (0) | 2022.12.23 |
[HTTP] URI 와 웹의 흐름 (0) | 2022.12.21 |
[HTTP] 인터넷 네트워크 (0) | 2022.12.21 |
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!