Computer Science/HTTP
HTTP 메서드 활용
nayoon030303
2022. 4. 9. 23:39
클라이언트에서 서버로 데이터 전송 방법
클라이언트에서 서버로 데이터를 전송하는 방법은 크게 2가지이다.
- 쿼리 파라미터를 통한 데이터 전송 (GET)
- 메시지 바디를 통한 데이터 전송 (POST, PUT, PATCH)
클라이언트에서 서버로 데이터를 전송하는 상황은 크게 총 4가지이다.
- 정적 데이터 조회
- 정적 데이터 조회는 이미지, 텍스트 등 쿼리 파라미터 없이 리소스를 경로로 조회한다.
- 동적 데이터 조회
- 쿼리 파라미터를 사용해서 검색, 정렬 필터 등으로 사용된다.
- HTML Form을 통한 데이터 전송
- GET, POST만 지원한다.
- 컨트롤 URI: 이런 제약을 해결하기 위해 동사로 된 리소스 경로를 사용한다.
- HTTP API를 통한 데이터 전송
- HTML에서 FORM전송 대신 자바스크립트를 통한 통신에 사용된다.
- API를 호출할 때 메시지 바디에 데이터를 넣어서 전송
- 클라이언트 -> 서버뿐만 아니라
- 서버 -> 서버
- 앱 클라이언트 등에서도 사용된다.
HTTP API 설계 예시
회원 관리 시스템을 만든다고 한다면
- 회원 목록 /members -> GET
- 회원 등록/members -> POST
- 회원 조회/members/{id} -> GET
- 회원 수정/members/{id} -> POST, PATCH, PUT
- 회원 삭제/memvers/{id} -> DELETE
위처럼 만들 것이다.
다른 것들은 어떤 HTTP 메서드를 써야 할지 명확하지만 회원 수정에서 어떤 메서드를 사용해야 할까?
PUT: 기존의 리소스를 삭제하고 덮어버린다.
PATCH: 부분적으로 수정한다.
회원 수정을 할 때면 대체로 PATCH를 사용하는 것이 좋다.
게시판에 게시글을 수정할 때는 PUT을 사용한다. 게시판을 수정하는 것은 안에 내용들을 덮어쓰는 것이기 때문이다.
그럼 이런 의문이 든다. 회원 등록을 할 때도 PUT을 사용할 수 있는 게 아닐까?
어떤 상황에서 POST를 사용하고 어떤 상황에서 PUT을 사용해야 하는 것 일까?
PUT과 POST의 차이점
POST
- 클라이언트는 등록될 리소스 URI를 모른다.
- POST/members
- 서버가 등록된 리소스 URI를 생성해준다.
- /members/100
- 이러한 형식을 컬렉션이라고 한다.
- /members
PUT
- 클라이언트가 리소스 URI를 알고 있어야 한다.
- PUT/files/cat.jpg
- 이러한 형식을 스토어라고 한다.
- /files
PUT과 POST의 차이점은 클라이언트가 리소스 URI를 알고 있나 모르고 있나에 차이점이다.
만약 회원 등록을 한다고 하면 그 회원이 몇 번째 회원인지는 서버에서 확인할 수 있다. 즉 클라이언트는 리소스 URI를 알 수 없다.
참고하면 좋은 URI 설계 개념
- 문서(document)
- 하나의 개념(파일 하나, 인스턴스, 데이터베이스 row)
- 컬렉션(collection)
- 서버가 관리하는 리소스 디렉터리
- 스토어(store)
- 클라이언트가 관리하는 리소스 디렉터리
- 컨트롤러(controller), 컨트롤러 URI
- 문서, 컬렉션, 스토어로 해결하기 어려운 추가 프로세스를 실행할 때 사용
- 동사를 직접 사용