Spring boot

[HTTP] HTTP 메서드 활용

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

 

데이터 전달 방식 기준

  1. 쿼리 파라미터 활용(조회) - GET

  2. 메시지 바디 활용(가입, 추가, 변경) -  POST, PUT, PATCH

 

 

데이터 전송 상황

  1. 정적 데이터 조회

    쿼리 파라미터 미사용, 단순 경로로 조회

    ex) GET /static/star.jpg HTTP/1.1

 

  2. 동적 데이터 조회

    검색, 정렬, 필터

    조회이므로 역시 GET 사용

    필요한 파라미터를 쿼리로 전달

    ex) GET /search?q=hello&hl=ko HTTP/1.1

 

  3. HTML Form

    GET/POST만 지원, 이외의 메소드는 지원하지 않는다.

    html form 에 있는 데이터를 웹 브라우저가 GET/POST 메서드로 만들어 서버에 전달

    단순 form일 때 Content-Type: application/x-www-form-urlencoded

    파일을 포함한 경우 Content-Type: multipart/form-data; boundary=-----XXX

    웹 브라우저에서 설정한 바운더리를 기준으로 필드를 나누어 파일 전송한다.

 

https://lng1982.tistory.com/209

 

  4. HTTP API

    서버 to 서버, 앱, 자바스크립트 통신을 하는 웹(React, VueJs... ) 등의 경우에서 사용

    GET, POST, PUT, PATCH, DELETE 모두 사용 가능

    과거에는 xml을 사용하였으나 현재는 주로 Content-Type: application/json 을 사용

 

 


HTTP API 설계 예시

 

GET - 조회

POST/PUT - 새로운 리소스 등록

 - PUT은 전체를 덮어쓰기 때문에 파일 관리, 게시판 서비스정도에서만 사용된다.

    클라이언트가 리소스를 관리하는 store 방식이다.

 - POST는 리소스를 서버에서 관리하는 collection 방식이다.

 

 

API 기반인 경우

회원 목록  /members -> GET

회원 등록  /members -> POST

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

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

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

 

이처럼 메서드를 기반으로 나눈다.

다만 메서드를 기반으로 깔끔하게 떨어지지 않는 상황이 있다. (회원 주문을 다음 상태로 진행해라 ... )

이런 경우 /process 등 동사를 붙여 구분하는 컨트롤 uri 방식을 사용한다.

 

 

HTMl FORM을 사용하는 경우 메서드의 개수가 더 적기 때문에 컨트롤 uri를 더 많이 활용한다.

회원 목록  /members -> GET

회원 등록 폼  /members/new -> GET

회원 등록  /members/new or /members -> POST

...

get과 post의 경로가 다르면 validation 절차에서 이전으로 돌아가기 힘든 문제가 있어

같은 경로를 사용하는 것을 추천하지만, 사람마다 다르게 사용하기도 한다.

 

 

URI 설계 개념 정리

 

- 문서(document)

  단일 개념(파일 하나, 인스턴스, 데이터베이스 row)

 

- 스토어 (Store)

  클라이언트가 관리하는 리소스 저장소

 

- 컬렉션(collection)

  서버가 관리하는 리소스 디렉터리

  서버가 리소스의 uri를 생성하고 관리

 

- 컨트롤러(controller)/ 컨트롤 URI

  문서, 컬렉션, 스토어로 해결하기 어려운 추가 프로세스 실행

  동사를 직접 사용

  ex) /members/{id}/delete

 

 

 

참고하면 좋은 링크

https://restfulapi.net/resource-naming/

 

 

 

'Spring boot' 카테고리의 다른 글

[HTTP] HTTP 일반 헤더  (0) 2021.11.09
[HTTP] HTTP 상태코드  (0) 2021.11.03
[HTTP] HTTP 메서드  (0) 2021.10.13
[HTTP] http 기본  (0) 2021.10.06
[HTTP] URI와 웹브라우저 요청 흐름  (0) 2021.09.29