HTTP 메서드 종류
GET : 리소스 조회
POST: 요청 데이터 처리, 주로 등록에 사용
PUT : 리소스를 대체, 해당 리소스가 없으면 생성한다
PATCH: 리소스 부분을 변경
DELETE: 리소스 삭제
HEAD: get과 동일하지만 메세지 부분을 제외하고, 상태 줄과 헤더만 반환한다
OPTIONS: 대상 리소스에 대한 통신 가능 옵션(메서드)을 설명(주로 cors 에서 사용한다)
CONNECT: 대상 자원으로 식별되는 서버에 대한 터널을 설정한다
TRACE : 대상 리소스에 대한 경로를 따라 메세지 루프백 테스트를 수행한다.
1. GET
서버에 전달하고 싶은 데이터는 쿼리를 통해서 전달한다.
메세지 바디를 사용해서 데이터를 전달할 수 있지만, 지원하지 않는 곳이 많아서 권장하지 않는다
2. POST
요청 데이터 처리
메세지 바디를 통해 서버로 요청 데이터 전달
서버는 요청 데이터를 처리, 주로 메세지 바디를 통해 들어온 데이터를 처리하는 모든 기능을 수행한다
주로 전달된 데이터로 신규 리소스 등록, 프로레스 처리에 사용된다.
POST /members HTTL/1.1
Content-Type: application/json
{
"username": "young",
"age" : 20
}
을 post을 할 때, 미리 규칙을 지정해 둔다.
예를들어, /members 의 post를 보낼 경우에는 그 맴버는 무조건 저장 하는 것으로 하겠다. 등등
데이터베이스에 신규로 저장하게 된다. 그러면, 서버에서는 저장한 값의 Location을 넣어준다.
HTTL/1.1 201 CREATED
Content-Type: application/json
Content-Lengyh : 34
Location: /memebers/100
{
"username": "young",
"age" : 20
}
post 요청은 데이터를 어떻게 처리하는 걸까?
- 게시판, 뉴스, 그룹, 메일링 리스트, 블로그 또는 유사한 기사 그룹에 메세지 게시
- 서버가 아직 식별하지 않는 새 리소스를 생성
- 요청 데이터 처리(예: 결제완료 -> 배달시작 -> 배달완료 등등 프로세스 상태가 변경되는 경우)
- 기존 자원에 데이터 추가 등등
3. PUT
- 리소스를 대체
- 리소스가 없으면 생성
- 기존의 데이터가 있을 경우, 완전하게 덮어쓰기 한다.
이름,나이에서 나이만 50으로 수정하고 싶어도 username도 사라지고 age : 50 만 넣어진다. - POST의 차이점은 url에서 지정경로를 준다는 것
예시)
POST /members HTTL/1.1
Content-Type: application/json
{
"username": "young",
"age" : 20
}
PUT /members/100 HTTL/1.1
Content-Type: application/json
{
"username": "young",
"age" : 20
}
put은 100번의 리소스를 알 고 있다. 100번의 리소스를 알고 있어야 하기 때문에, 리소스 위치를 알고 url을 지정한다.
4. PATCH
put처럼 전체 덮어쓰기 말고, 부분 수정만 하고 싶을 때 사용한다.
이름,나이에서 나이만 50으로 수정하고 싶으면 age : 50 만 수정
HTTP 속성
1. 안전
- 호출해도 리소스를 변경하지 않는다
2. 멱등
한 번 호출하든 백번 호출하든 결과는 동일해야한다.
- get: 데이터 조회이기 때문에 동일하다
- put : 결과를 대체하지만, 최종 결과는 같지만
- delete: 결과를 삭제하는 것 최종적으로 결과 삭제는 값이 동일하다
- POST: 멱등하지 않는다. 두번 호출하면 같은 결제가 중복해서 발생할 수 있다.
3. 캐시가능
- 응답 결과 리소스를 캐시해서 사용해도 되는가
- get, head, post, patch 캐시 가능
- 실제로는 get,head 정보만 캐시로 사용한다
- post, patch는 본문 내용까지 캐시키로 고려해야 하는데, 쿠현이 쉽지 않다.
데이터 전달 방식은 크게 두가지이다.
1. 쿼리 파라미터를 통한 데이터 전송 (GET)
2. 메세지 바디를 통한 데이터 전송 (POST, PUT, PATCH)
HTTP Form 데이터 전송
파일 업로드는 같은 바이너리 데이터 전송시 사용된다
다른 종류의 여러 파일과 폼의 내용을 함께 전송가능하다
GET,POST만 지원한다.
HTTP API 데이터 전송
데이터를 서버로 바로 전송해야할 때, json에 넣고 전부 넘기면 된다.
- 서버 to 서버 일 때 사용
- 앱 클라이언트 (아이폰, 안드로이드)
- 웹 클라이언트
HTML 에서 FORM 전송 대신 자바 스크립트를 통한 통신에 사용 - post, put, patch 메세지 바디 통해 데이터 전송 등등..
HTTP API 설계 예시
- 회원목록 /members -> GET
- 회원등록 /members -> POST
- 회원조회 /members/{id} -> GET
- 회원수정 /members/{id} -> PATCH(부분적으로 수정할 것이면 추천),PUT,POST
- 회원삭제 /members/{id} -> DELETE
파일 관리 시스템
- 파일목록 /files ->GET
- 피일조회 /files/{filename} ->GET
- 파일등록 /files/{filename} -> PUT (있으면 기존 파일 지우고 등록)
- 파일삭제 /files/{filename} -> DELETE
- 파일대량등록 /files -> POST
왜 PUT을 사용할 때, jpg의 경로
/files/star.jpg 의 형식으로 파일을 직접 등록한다.
반면, 회원등록을 할때는 POST를 사용하는데 이를 처리할 때는 클라이언트는 /members 만 알고 있으면 된다.
이처럼 관리시스템은 두가지로 나뉘는데, PUT, POST 기반의 관리 방법이 있다.
클라이언트가 리소스의 대한 정보를 아예모르고 서버가 등록하고 관리하는 형식을 "Collection" 라고 한다.
클라이언트가 리소스의 저장소를 직접 관리하고 아는 것 형식을 "Store" 라고 한다.
보통은 Collection 기준의 형식을 많이 사용한다.
HTML FORM 사용
이는 GET, POST 만 사용가능하다.
- 회원목록 /members -> GET
- 회원등록 /members -> POST
- 회원등록폼 /members/new -> GET
- 회원조회 /members/{id} -> GET
- 회원수정 /members/{id} -> POST
- 회원수정 폼 /members/{id}/edit -> GET
- 회원삭제 /members/{id}/delete -> POST
(만약에 delete라는 메서드를 사용할 수 없을 경우 /delete url 추가후 POST사용)
GET, POST 만 사용가능하기 때문에 이를 해결하기 위해서 동사로된 리소스 경로를 추가하여 사용한다. 예) delete, edit ...
이를 "컨트롤Uri" 라고 한다
'아무거나 공부' 카테고리의 다른 글
[프로젝트] 채팅방만들기 - 회원가입구현 (0) | 2025.03.13 |
---|---|
[프로젝트] 채팅방만들기 - 도메인구성 (0) | 2025.03.03 |