1. HTTP API를 만들어보자
API에서 가장 중요한 것은 리소스 식별
리소스란 회원을 등록하고 조회하는
행위가 리소스가 아니다!!회원이면 회원,게시글이면 게시글, 그 개졈 자체가 바로리소스다.따라서, 획일화된 리소스를 식별(Uniform Resource Identifier) 하는데 있어, 회원을 등록하고 수정하고 조회하는 것을 모두 배제!
회원이라는 리소스만 식별하면된다!! 즉, 회원 리소스를 URI에 매핑해야한다!!
API URI 설계
1. 제일 중요한것은 리소스를 식별하는 것!
2. 리소스랑 행위를 분리해야 한다!
- URI는 리소스만 식별!
- 리소스와 래당 리소스를 대상으로 하는 행위를 분리!
- 리소스: 회원
- 행위: 조회, 등록, 삭제, 변경
- 리소스는 명사, 행위는 동사
- 행위(메소드)는 HTTP 메소드로 구분!!
2. HTTP 메소드 종류
- GET; 리소스 조회
- POST: 요청 데이터 처리, 주로 등록에 사용
- PUT: 리소스를 대체, 해당 리소스가 없으면 생성
- PATCH: 리소스 부분 변경
- DELETE: 리소스 삭제
ex)
회원 목록 조회: GET /members(
회원 조회: GET /members/{id}
회원 등록: POST /members/{id}
회원 수정: PATCH /members/{id}
회원 삭제: DELETE /members/{id}
번외. 비주류 메소드
HEAD, OPTIONS, CONNECT, TRACE
1. GET
- 리소스 조회
- 서버에 전달하고 싶은 데이터는 쿼리 파라미터, 쿼리 스트링 통해서 전달
- 메시지 바디를 사용해서 데이터를 전달할 수 있지만, 지원하지 않는 곳이 많아서 권장하지 않는다.
2. POST
- 요청 데이터 처리
- 메시지 바디를 통해 서버로 요청 데이터 전달
- 서버는 요청 데이터를 처리(바디를 통해 들어온 데이터를 처리하는 모든 기능 수행)
- 단순히 데이터를 생성하거나, 변경하는 것을 넘어서 프로세스를 처리해야 하는 경우
- ex) 주문에서 결제완료 -> 배달시작 -> 배달완료 처럼 단순히 값 변경을 넘어 프로세스의 상태가 변경되는 경우
- POST의 결과로 새로운 리소스가 생성되지 않을 수도 있다.
- ex) POST/orders/{orderId}/start-delivery (이런 URI를 컨트롤 URI라 한다.)
- 주로 전달된 데이터로 신규 리소스 등록, 프로세스 처리에 사용
- 서버가 아직 식별하지 않는 새 리소스 생성
- 프로세스 처리시 다른 메서드로 처리하기 애매한 경우 쓰인다.
- ex) JSON으로 조회 데이터를 넘겨야 하는데, GET 메서드를 사용하기 힘든 경우
- 즉, 애매하면 POST를 쓴다.
- 서버는 요청 데이터를 처리(바디를 통해 들어온 데이터를 처리하는 모든 기능 수행)
3. PUT
- 리소스를 대체
- 리소스가 있으면 대체 (완전히 대체)


- 리소스가 없으면 생성
- 중요! 클라이언트가 리소스를 식별
- 클라이언트가 리소스 위치를 알고 URI 지정!
-> PUT /members/100 이런식으로 아예 특정 리소스 위치를 부르는식이다! - 이게 POST와 다른점이다.
4. PATCH
- PUT과 다르게 달라진 부분만! 변경한다.
- PUT에서 다른거 다 똑같다
- 근데 가끔 PATCH를 지원 안하는 서버가 있다...(그땐 무적의 POST를 쓰자)
- 클라이언트가 리소스 위치를 알고 URI 지정!
- 리소스가 있으면 대체 (완전히 대체)
5. DELETE
- 리소스 삭제할때 쓴다.
3. HTTP 메소드 속성
안전, 멱등, 캐시가능
1. 안전(Safe Methods)
- 호출해도 리소스를 변경하지 않는다.(GET, HEAD)
- Q: 계속 호출해서, 로그가 쌓여서 장애가 발생하면?
A: 안전은 해당 리소스만 생각!. 저런 거는 다른 부분에서 생각해야 된다.
2. 멱등 (Idempotent)
- 한번 호출하든 두 번 호출하든 100번 호출하든 결과가 똑같다.
- 멱등 메서드
- GET: 한 번 조회하든, 두 번 조회하든 같은 결과가 조회된다!
- PUT: 결과를 대체하므로 몇번 요청해도 결과는 같다.
- DELETE: 결과를 삭제하므로 몇번 요청해도 삭제되야 하는것만 삭제된다.(결과는 동일하다.)
멱등이 아닌것:
POST: 이거 두번 호출하면 결제같은건 두 번 결제되므로 멱등이 아니다- 멱등은 외부 요인으로 중간에 리소스가 변경되는 것 까지는 고려하지 않는다.
3. 캐시가능(Cacheable)
- 멱등은 외부 요인으로 중간에 리소스가 변경되는 것 까지는 고려하지 않는다.
- 응답 결과 리소스를 캐시해서 사용해도 되는지 확인
- 간단하게 이 이미지(리소르)를 내 웹브라우저 내부에 저장할 수 있느냐 없느냐
- GET, HEAD, POST, PATH 가능
- 그러나, GET, HEAD 정도만 캐시로 사용되고, POST, PATCH는 본문 내용까지 캐시 키로 고려해야 하는데, 구현이 어렵다.
'웹개발 > 웹서버' 카테고리의 다른 글
| HTTP 상태코드란? 404 NOT Found란? (0) | 2023.12.17 |
|---|---|
| HTTP 메소드 활용 (0) | 2023.12.14 |
| [JPA]proxy객체와 호출시기 (0) | 2023.12.13 |
| HTTP란? 빠르게 핵심 알아보기 (0) | 2023.12.10 |
| URI와 웹브라우저 요청 흐름 (0) | 2023.12.08 |