클라이언트에서 서버로 데이터 전송
데이터 전달 방식 기준
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
웹 브라우저에서 설정한 바운더리를 기준으로 필드를 나누어 파일 전송한다.
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 |