안전

  • 호출해도 리소스가 변하지 않음
  • 만약, 로그가 쌓여서 장애가 발생한다면?
  • 그런 부분은 고려하지 않고, 오로지 리소스가 변경되고 삭제됬는지만 고려합니다.

 

 

멱등

  • 한번 호출하든, 백번 호출하든 결과가 똑같습니다.
  • 멱등 메서드는 무엇이 있을까?
PUT : 결과를 대체하는 메서드이므로, 몇번 하든 결과가 같다 ( 멱등 )
GET : 한번 조회하든, 두번 조회하든 결과가 조회된다. ( 멱등 )
DELETE : 결과를 삭제한다. 같은 요청을 여러번해도 삭제된 결과는 같다 ( 멱등 )
POST : 두 번 호출하면 결과가 중복될 수 있다. ( 멱등이 아니다 !! )

 

 

멱등 활용하기

  • 자동 복구 메커니즘
  • 서버가 TIMEOUT 등으로 정상 응답을 주지 못할 때, 클라이언트가 같은 요청을 다시 해도 되는가의 판단 근거가 됩니다.

 

 

멱등은 중간에 리소스를 변경하는 것도 고려를 하는가?

GET -> PUT -> GET 으로 데이터가 바뀐것을 조회할 수 있습니다.

멱등은 외부 요인으로 중간에 리소스가 변경되는 것은 고려하지 않습니다.

 

 

 

캐시 가능

  • 응답 결과 리소스를 캐시해서 사용해도 되는가?
  • GET, HEAD, POST, PATCH 캐시 가능
  • 실제로는 GET, HEAD 정도만 캐시로 사용되며, POST,PATCH 는 본문 내용까지 캐시 키로 고려해야하는데, 구현이 쉽지 않음

 

 

클라이언트에서 서버로 데이터 전송하는 방법

  • 쿼리 파라미터를 통한 데이터 전송

URI 끝에 쿼리 파라미터를 넣어서 전송하는 방법입니다.

이것은 주로 GET 으로 정렬 필터 ( 검색어 ) 에 사용을 많이 하는 편입니다.

 

  • 메시지 바디를 통한 데이터 전송

HTTP 메세지 바디를 통해서 전송하는데, POST/PUT/PATCH 를 이용해서

회원가입, 상품주문, 리소스 등록, 리소스 변경할 때 주로 사용합니다.

 

 

클라이언트에서 서버로 데이터를 전송하는 상황 4가지

  • 정적 데이터 조회

- 이미지, 정적텍스트 문서

- 조희는 GET 사용

- 정적 데이터는 일반적으로 쿼리 피라미터 없이 리소스 경로로 단순하게 조회 가능

 

 

  • 동적 데이터 조회

- 주로 검색, 게시판 목록에서 정렬필터 ( 검색어 )

- 조회 조건을 줄여주는 필터, 조회 결과를 정렬하는 정렬 조건에 주로 사용

- 조회는 GET 사용

- GET 은 쿼리 피라미터 사용해서 데이터 전달

 

        클라이언트                                                                                서버

 

  

 

  • HTML Form 을 통한 데이터 전송

- 회원가입, 상품 주문, 데이터 변경

 

클라이언트                                                                               서버

- HTML Form submit 시 POST 전송

- 회원 가입, 상품 주문, 데이터 변경에 주로 사용됨

- Content-Type : application/x-www-form-urlencoded 사용

   -> form 내용을 메세지 바디에 넣어줘서 전송 ( 쿼리 피라미터 형식 )

   -> 전송 데이터를 url encoding 처리

 

클라이언트                                                                                 서버

- GET 은 메세지 바디를 쓰지않고, 쿼리 파라미터에 넣어서 서버에 전달합니다.

- 그러나 위의 예제에서는 저장하는 save 메서드에 GET ( 조회 ) 메서드를 사용하므로 쓰면 안되는 문장입니다.

 

- 위와 같이 멤버를 조회하는 문장에는 사용할 수 있습니다.

 

- 파일 업로드 같은 바이너리 데이터 전송시 사용

- 이름이 multipart 인 이유는 다른 종류의 여러 파일과 폼의 내용 함께 전송 가능하기 때문입니다.

 

*** HTML Form 전송은 GET,POST 만 지원

 

 

 

  • HTTP API 를 통한 데이터 전송

ex. 안드로이드 앱 애플리케이션에서 클라이언트에서 서버로 데이터를 바로 전송해줘야 할 때,

       이를 HTTP API 로 전송한다고 부릅니다. ( 그냥 다 만들어서 넘기는 것입니다. )

 

- 서버에서 서버로 백엔드 시스템 통신

- 앱 클라이언트 ( 아이폰, 안드로이드 )

- 웹 클라이언트

     -> HTML 에서 Form 전송 대신 자바 스크립트를 통한 통신에 사용 ( AJAX )

     -> React, Vue.js 같은 웹 클라이언트와 API 통신

- POST, PUT, PATCH : 메세지 바디를 통해 데이터 전송

- GET : 조회,쿼리 피라미터로 데이터 전달

- Content-Type : application/json 을 주로 사용 ( TEXT, XML, JSON 등등 )

 

'HTTP' 카테고리의 다른 글

RestAPI 활용하기  (0) 2022.08.22
Message States Server  (0) 2022.08.19
HTTP API 설계와 메서드  (0) 2022.08.14
HTTP - 짧게 정리  (0) 2022.08.13
HTTP  (0) 2022.08.03

+ Recent posts