쿼리 파라미터를 통한 데이터 전송
GET
주로 정렬 필터(검색어)
메시지 바디를 통한 데이터 전송
POST, PUT, PATCH
회원 가입, 상품 주문, 리소스 등록, 리소스 변경
1) 정적 데이터 조회
이미지, 정적 텍스트 문서 = 조회는 GET사용
정적 데이터는 일반적으로 쿼리 파라미터 없이 리소스 경로로 단순하게 조회 가능
GET /static/start.jpa HTTP/1.1
Host: localhost:8080
2) 동적 데이터 조회
주로 검색, 게시판 목록에서 정렬 필터(검색어), 추가 데이터를 전달
조회 조건을 줄여주는 필터, 조회 결과를 정렬하는 정렬 조건에 사용한다.
= 조회는 GET을 사용
GET /search?q=hello&hi=ko HTTP/1.1 (단순 쿼리 파라미터로 조회 가능)
Host: www.google.com
쿼리 파라미터를 기반으로 정렬 필터에서 결과를 동적으로 생성한다.
3) HTML Form을 통한 데이터 전송
회원 가입, 상품 주문, 데이터 변경
POST와 GET으로 사용 가능하다.

메서드를 get으로 변경 가능하다. key-value 형식으로 쿼리 파라미터에 넣어서 서버에 전달한다. URL 경로에 넣는다.
4) HTTP API를 통한 데이터 전송
회원 가입, 상품 주문, 데이터 변경
서버 to 서버, 앱 클라이언트, 웹 클라이언트(Ajax)
서버끼리 통신할 떄 사용된다.
앱 클라이언트,
웹 클라이언트 : HTML에서 Form 전송 대신 자바 스크립트를 통한 통신에 사용(AJAX)
ex. React, VueJs 같은 웹 클라이언트와 API 통신
1) 쿼리 파라미터를 통한 데이터 전송 = GET, 정렬 필터
GET, 주로 정렬 필터(검색어)
2) 메시지 바디를 통한 데이터 전송 = POST, PUT, PATCH
POST, PUT, PATCH
회원 가입, 상품 주문, 리소스 등록, 리소스 변경
1) 정적 데이터 조회 = GET
이미지, 정적 텍스트 문서
2) 동적 데이터 조회 = GET, 쿼리 파라미터
주로 검색, 게시판 목록에서 정렬 필터(검색어)
3) HTML Form을 통한 데이터 전송 = GET, POST
회원 가입, 상품 주문, 데이터 변경
4) HTML API를 통한 데이터 전송 = 서버 to 서버끼리 통신
회원 가입, 상품 주문, 데이터 변경
서버 to 서버, 앱 클라이언트, 웹 클라이언트(Ajax)
회원 목록/members -> GET
회원 등록/members -> POST
회원 조회/members/{id} -> GET 하위에 있는 member id를 넣어준다.
회원 수정/members/{id} -> PATCH(부분수정), PUT(덮어쓰기, 게시글 수정할 때), POST
회원 삭제/members/{id} -> DELETE
POST (신규 자원 등록 특징)
클라이언트는 등록될 리소스의 URI를 모른다.
서버가 새로 등록된 URI를 생성해준다.
회원 등록 /members -> POST
POST /members
서버가 새로 등록된 리소스 URI 생성해준다.
HTTP/1.1 201 Created
Location: /members/100
컬렉션 (위에 있는 형식)
서버가 관리하는 리소스 디렉토리
서버가 리소스의 URI를 생성하고 관리
여기서 컬렉션은 /members가 된다.
파일 목록 /files -> GET
파일 조회 /files/{filename} -> GET
파일 등록 /files/{filename} -> PUT(덮어쓰기)
파일 삭제 /files/{filename} -> DELETE
파일 대량 등록 /files -> POST (의미를 지정할 수 있다)
3) 웹 페이지 회원 관리
HTML FORM은 GET, POST만 지원한다.
AJAX같은 기술을 사용해서 해결 가능 -> 회원 API 참고
순수 HTML, HTML FORM 이야기
GET, POST만 지원하므로 제약이 있다.
회원 목록 /members -> GET
회원 등록 폼 /members/new -> GET
회원 등록 /members/new, /members -> POST
회원 조회 /members/{id} -> GET
회원 수정 폼 /members/{id}/edit -> GET
회원 수정 /members/{id}/edit, /members/{id} -> POST
회원 삭제 /members/{id}/delete -> POST
GET, POST만 지원하므로 제약이 있다.
제약을 해결하기 위해 동사로 된 리소스 경로 사용
POST의 /new, /edit, /delete가 컨트롤 URI (이상적이지만)
HTTP 메서드로 해결하기 애매한 경우 사용한다. (HTTP API포함)
HTTP API 컬렉션
POST 기반 등록
서버가 리소스 URI 결정
HTTP API 스토어
PUT 기반 등록
클라이언트가 리소스 URI 결정
HTML FORM 사용
순수 HTML + HTML form 사용
GET, POST만 지원
컬렉션과 문서로 최대한 해결하고, 그래도 안된다면 컨트롤 URI를 활용한다.
정리하는데 개념적으로 정리할 때 사용한다.
1) 문서
단일 개념(파일 하나, 객체 인스턴스, 데이터베이스 row)
ex. /members/100, /files/star.jpg
2) 컬렉션 (서버가 생성하고 관리) = 대부분 개발
서버가 관리하는 리소스 디렉터리
서버가 리소스의 URI를 생성하고 관리
ex. /members
3) 스토어 (클라이언트가 URI를 알고 관리)
클라이언트가 관리하는 자원 저장소
클라이언트가 리소스의 URI를 알고 관리
ex. /files, 게시판
4) 컨트롤러, 컨트롤 URI (데이터를 조작하거나 변경할 때)
문서, 컬렉션, 스토어로 해결하기 어려운 추가 프로세스 실행
동사를 직접 사용 delete, delivery 등
ex. /members/{id}/delete