새소식

back

http (3) - Http 메서드 / 메서드 활용

  • -

 

1.

ex) 요구 사항: 회원 정보 관리 api 만들기 (회원 목록 조회, 회원 조회, 회원 등록, 회원 수정, 회원 삭제)

- uri 설계시 가장 중요한 것은 리소스 식별

행위를 http 메서드를 통해 구분함

 

 

2.

patch는 회원의 이름을 변경하거나 특정 필드 변경시에 사용
참고 정도로만 보기
리소스 조회1 - 메세지 전달, 리소스 조회2 - 서버도착, 리소스 조회3 - 응답 데이터(서버에서 생성),

 

 

주로 등록에 사용
/members 에 post로 보냄
데이터를 받아서 db에 신규 내용을 등록
신규 자원이 생성되면 서버는 http 201 created 라고 보냄 + 자원에 대한 데이터 / 자원이 생성된 경로도 보내줌
1. 컨트롤 uri: 리소스만으로 uri구성이 안되는 경우 동사를 이용해 uri를 설계함 /  2. get메서드의 메세지 바디를 이용한 데이터 전달은 지원하지 않는 서버가 많음 > post의 메세지 바디에 조회용 데이터를 넘김

- post는 메세지를 내부에 담아 보낼 수 있는 모든 것을 할 수 있지만, 조회는 get이 유리(캐싱 가능), 변경되거나 프로세스가 진행되거나 어쩔 수 없는 경우에 post사용

 

 

3.

위 코드는 100번에 넣는다고 지정
리소스 대체(완전히 대체함)

 

신규 리소스 생성

 

 

 

 

 

members의 100을 지움

 

 

 

4.

get은 조회만 하기에 안전하지만(+head), post/put/patch/delete 는 안전하지 않음(변경이 일어나기 때문)
put은 기존의 것을 날리고 덮어씌우기에 결과가 같음

- 멱등은 자동 복구 메커니즘에 활용(ex: delete를 호출했는데 서버에서 응답 없음 > 클라이언트가 재시도, 멱등한 요청이기에 문제 없음)

ex: 웹브라우저에 큰 이미지를 요청, 이후에는 웹브라우저가 로컬pc에 저장함(캐시)

- GET은 url을 키로 잡고 캐시를 하면 됨(실무에선 주로 get만 캐시로 사용)

 

 

 

2-1

- 이미지, 정적 텍스트 문서 같은 경우, 조회이기에 GET 사용, 정적 데이터는 일반적으로 쿼리 파라미터 없이 리소스 경로로 단순하게 조회 가능

메세지 바디의 username과 age는 키/값 스타일로 전달됨
get은 메세지 바디 지원하지 않는 서버가 많기에 쿼리 파라미터에 넣음

- 위 http 메세지를 보면 save(리소스 변경)이기에 get 사용 불가

username/age뿐만 아니라 byte로 되어있는 파일도 같이 전송, 이럴 때 multipart/form-data라는 메세지 바디에 넣는 데이터 형식을 사용, 주로 binary data 전송 시 사용
get 전송은 save 불가!

 

- 서버끼리의 통신은 html 같은게 전혀 없음(기계끼리의 통신이기 때문)

- get은 쿼리 파라미터로 post는 메세지 바디로 데이터 전달

 

 

 

 

2-2.

컬렉션

post기반

- 검색 조건이나 정렬 조건도 쿼리 파라미터로 설정 가능

- /members 를 컬렉션으로 부름

- 회원 수정은 경우에 맞춰 메서드 사용(patch가 주로 적절함)

- put이 적절한 상황 ex: 게시판 글 수정(게시글 수정하면 완전히 덮어씌어짐)

- post를 통해 특정 컬렉션에 신규 데이터를 등록한다고 서버에 요청하면 서버가 요청을 받아 db에 저장, 그 후 신규 리소스를 식별할 수 있는 uri를 서버가 생성 그리고 응답할 때 location의 값으로 넘겨줌 또는 메세지 바디에 id 형식으로 넘기기도 함

- post로 데이터 등록할 때는 서버에서 리소스 uri를 결정하고 생성함

 

 

스토어

put기반, /files 를 폴더로 가정

- 파일은 중복이 안되고 덮어씌우기에 위 상황에서는 등록으로 put을 사용함

put은 클라이언트가 리소스 위치를 알고 uri 지정, post는 위치를 모르고 서버가 알아서 만들고 전달해주는 것

- put은 클라이언트가 리소스 uri를 알고 등록함, 서버는 오는대로 처리해주는 것일 뿐

- 대부분 post 기반의 신규 자원 등록을 사용 (컬렉션 사용), put은 파일 업로드, 게시글 수정등의 소수의 목적으로만 사용됨

 

ex: 회원 등록이라는 버튼을 누름

> /members/new 링크로 연결

> 회원 등록 폼에서 정보 입력 후 저장 버튼 클릭

> post 필요 (1. /members/new 를 폼을 등록할 때는 get 사용하고 실제 데이터 저장시엔 post 사용, 경로 유지 장점이 있어 추천

2. 폼 등록시에는 /members/new 사용하고 실제 등록시엔 컬렉션을 자원으로 관리하는 것처럼 /members 를 post넘기기

 

- 회원 수정 폼과 회원 수정 동작 또한 위의 설명과 같이 경로 설정이 가능하다. (마찬가지로 폼과 동작의 url을 통일하는것 추천)

 

- 삭제같은 경우도 post로 처리하는데, delete메서드 사용이 제한되므로 컨트롤 uri사용 

 

- 무작정 컨트롤 uri 사용보단 최대한 리소스를 사용해 설계를 하고 그 상황에서 안될 때 컨트롤 uri를 대체제로 사용

 

 

정답은 아님

- /files 경우에 클라이언트가 전체 uri경로를 put메서드 이용해 넣음

- 컨트롤 uri는 주로 데이터를 조작/변경하는 일이기에 동사 이용

 

편리한 uri 생성 위한 기준

1. 리소스는 명사(ex: 회원/주문, 복수형)

2.  상세정보(회원번호/주문번호)를 가지고 해결이 안되는 상황은 컨트롤 uri 사용

- 컬렉션이나 문서를 가지고 최대한 해결(get/post/put/delete)을 하고 안될때 컨트롤 uri 사용 

'back' 카테고리의 다른 글

http (5) - 헤더  (0) 2023.03.08
http (4) - 상태 코드  (0) 2023.03.08
http (2) - HTTP 기본  (0) 2023.03.08
http (1) - 인터넷 네트워크 / URL / 웹브라우저 요청 흐름  (0) 2023.03.07
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.