HTTP

HTTP API 설계 (GET/POST/PUT/PATCH/DELETE) (김영한 HTTP)

ho코딩 2024. 1. 6. 22:54

API를 설계할 때 가장 중요한 것은? 리소스 식별 ! 

 

회원 목록 조회 / 회원 조회/ 등록/ 수정 /삭제의 예시를 통해서 공부

 

리소스란 무엇일까? 

 

예를 들어서. "회원가입을 한다"라고 할때, 회원가입을 하는 것 자체가 리소스가 아니다. 

여기서 리소스는 "회원"이다.  때문에 "회원"을 중점적으로 설계해야한다. 

또한 이러한 회원은 조회/삭제/등록/수정 할 때 모두 사용되므로 복수단어로 사용하는게 좋다

(이때 "회원"과 같이 상위에 있는 개념은 컬렉션이라고 한다) 

ex) /create-member (X)   ---> /members/{id} (O)

 

즉, 리소스와 해당 리소스를 대상으로 하는 행위를 분리시키는 것이 중요하다 

->리소스: 회원

->행위: 조회,등록,삭제,수정

 

그럼 의문이 하나 생긴다. 

조회/등록/삭제/수정을 모두 /members 라는 api로 두면 이게 등록인지 조회인지 수정인지 어떻게 구별? 

 

이는 HTTP 메서드를 통해서 해결할 수 있다. 

HTTP 메서드 
GET : 리소스 조회 
POST: 요청 데이터 처리, 주로 등록에 사용
PUT: 리소스 대체, 해당 리소스가 없으면 생성
PATCH: 리소스 부분 변경 
DELETE: 리소스 삭제 

 

 

GET 메서드

 

 

먼저 GET은 리소스를 조회할 때 사용하므로 HTTP 메시지에 GET을 사용하여 서버에 요청하면 

서버로 부터 리소스를 클라이언트로 가져오는 것을 의미하는 요청이다. 

100번 member를 get하는 요청을 서버에 보낸다.

 

 

이 요청을 받은 서버는 메시지에 담긴 내용을 바탕으로 서버에서 조회하고 응답데이터를 생성해 클라이언트에게 보낸다.

 

 

 

POST 메서드

클라이언트에서 서버로 POST 아래와 같은 요청을 보내게되면, 

young이라는 username의 20살의 age를 가진 데이터가 서버에 전송된다.

 

그러면 

 

서버에서는 데이터를 보고 데이터를 생성할 location을 임의로 100으로 지정하고 

http 응답 메시지를 생성하여 클라이언트에게 반환해줍니다. 

임의로 반환한 location 100에 대한 정보 또한 클라이언트의 HTTP 헤더에 포함해서 전달합니다.

 

PUT 메서드

 

GET은 조회 / POST는 등록,처리 라면 

PUT은 덮어쓰기와 같습니다. 

 

예를 들면, 우리가 폴더에 A.txt라는 파일을 넣습니다. 그리고 똑같은 이름의 A.txt 파일에 다른 내용을 넣어 

다시 같은 폴더에 넣으면 , "이미 같은 이름으 파일이 존재합니다"라는 문구와 함께, 덮어쓸 것인지 물어보죠

 

이때 덮어쓰면 , 기존에 A.txt 파일에 있던 내용은 모두 날아가고, 새로운 A.txt 내용으로 대체됩니다. 

 

하지만 폴더에 A.txt.파일이 원래 없었다면, 그냥 생성되죠,

 

PUT 메서드도 이와 비슷합니다. 

리소스가 있으면 대체 , 없으면 생성. 이때 POST와 또 다른점 하나는 POST는 데이터의 location을 모르지만

PUT은 데이터의 location을 알고 있어야합니다. 

 

 

이렇게 하면 /members/100에 내용이 존재하므로 클라이언트가 PUT한 내용으로 덮어지고, 

만약 members/100 주소에 아무것도 없었다면, 클라이언트가 요청한 내용으로 새로 생성됩니다. 

 

여기서 중요한 점이 있습니다. 

만약 

 

이처럼 username 과 age 중 age만 덮어쓰고 싶다고 해서 age만 기술하여 요청을 보내면 

이 처럼 원래 있던 username도 사라지게 됩니다. 그러므로 PUT을 사용할 때는 모든 필드를 다시 작성해야 

오류가 발생하지 않습니다. 

 

즉, 부분변경이 되지 않고 완전하게 대체됩니다.

 

PATCH 메서드

 

PATCH메서드는 PUT 메서드의 부분 변경을 가능하게 해주는 메서드 입니다. 

 

이처럼 age만 바꾸고 싶어서 age만 http 메시지에 담아 서버에 전송하면 

 

서버는 기존의 username은 두고 age만 50으로 바꾸어 저장합니다. 

 

즉, PATCH는 부분변경을 가능하게 해주는 메서드 입니다 

 

DELETE 메서드

 

마지막으로 DELETE 메서드 입니다. 

이름에서도 알 수 있듯, 기존에 존재하고 있던 리소스를 삭제하는 메서드 입니다 .

 

이와 같이, 클라이언트에서 /members/100을 DELETE 메서드를 이용해 서버에 요청을 하면 

서버는 /members/100에 있던 리소스를 삭제합니다 . 

'HTTP' 카테고리의 다른 글

HTTP 헤더 (http 김영한)  (1) 2024.01.07
HTTP 상태코드 (http 김영한)  (0) 2024.01.07
HTTP 서버 (김영한 HTTP)  (0) 2024.01.06
HTTP URI/URL/URN (김영한 http)  (1) 2024.01.06
HTTP 인터넷 통신 (김영한 http)  (1) 2024.01.06