CS/Network

[Network] HTTP Method

창문닦이 2020. 3. 30. 00:36

REST는 프로토콜이나 표준이 아닌 아키텍처 원칙 세트이다.  API 개발자는 REST를 다양한 방식으로 구현 가능하다.

 

 RESTful API는 다음 기준을 따라야 한다. 

모든 리소스를 URI로 구별할 수 있다
모든 리소스는 복수의 형태로 나타낼 수 있다
모든 리소스는 HTTP 표준 메소드를 이용하여 접근/수정/생성/삭제할 수 있다

클라이언트, 서버 및 리소스로 구성되었으며 요청이 HTTP를 통해 관리되는 클라이언트-서버 아키텍처

스테이트리스(stateless) 클라이언트-서버 커뮤니케이션: 요청 간에 클라이언트 정보가 저장되지 않으며, 각 요청이 분리되어 있고 서로 연결되어 있지 않음

 

HTTP 요청 메서드

GET : GET 메서드는 특정 리소스의 표시를 요청합니다. GET을 사용하는 요청은 오직 데이터를 받기만 함.
HEAD : HEAD 메서드는 GET 메서드의 요청과 동일한 응답을 요구하지만, 응답 본문을 포함안 함.
POST : POST 메서드는 특정 리소스에 엔티티를 제출할 때 사용.
PUT : PUT 메서드는 목적 리소스 모든 현재 표시를 요청 payload로 변경
DELETE : DELETE 메서드는 특정 리소스를 삭제.
CONNECT : 프락시 서버와 같은 중간 서버 경유.
OPTIONS :  웹서버측 제공 메소드에 대한 질의 - 가능한 메소드 옵션에 대한 질의.
TRACE : 요청 리소스가 수신되는 경로를 보여줌.
PATCH : PATCH 메서드는 리소스의 부분만을 수정.

 

RESTful API용 HTTP 메소드 요약

메소드 CRUD 전체 컬렉션 특정 항목
POST Create 201 (Created), ‘Location’ header with link to /users/{id} containing new ID. Avoid using POST on single resource
GET Read 200 (OK), list of users. Use pagination, sorting and filtering to navigate big lists. 200 (OK), single user. 404 (Not Found), if ID not found or invalid.
PUT Update/Replace 405 (Method not allowed), unless you want to update every resource in the entire collection of resource. 200 (OK) or 204 (No Content). Use 404 (Not Found), if ID not found or invalid.
PATCH Partial Update/Modify 405 (Method not allowed), unless you want to modify the collection itself. 200 (OK) or 204 (No Content). Use 404 (Not Found), if ID not found or invalid.
DELETE Delete 405 (Method not allowed), unless you want to delete the whole collection — use with caution. 200 (OK). 404 (Not Found), if ID not found or invalid.

 

GET방식과 POST방식 비교

BACK button/Reload Harmless Data will be re-submitted (the browser should alert the user that the data are about to be re-submitted)
Bookmarked Can be bookmarked Cannot be bookmarked
Cached Can be cached Not cached
Encoding type application/x-www-form-urlencoded application/x-www-form-urlencoded or multipart/form-data. Use multipart encoding for binary data
History Parameters remain in browser history Parameters are not saved in browser history
Restrictions on data length Yes, when sending data, the GET method adds the data to the URL; and the length of a URL is limited (maximum URL length is 2048 characters) No restrictions
Restrictions on data type Only ASCII characters allowed No restrictions. Binary data is also allowed
Security GET is less secure compared to POST because data sent is part of the URL

Never use GET when sending passwords or other sensitive information!
POST is a little safer than GET because the parameters are not stored in browser history or in web server logs
Visibility Data is visible to everyone in the URL Data is not displayed in the URL

 

HTTP 요청 메서드별 속성

멱등성 
동일한 요청을 한 번 보내는 것과 여러 번 연속으로 보내는 것이 같은 효과를 지니고, 서버의 상태도 동일하게 남을 때, 해당 HTTP 메서드가 멱등성을 가졌다고 말합니다. 멱등성 메서드에는 통계 기록 등을 제외하면 어떠한 부수 효과(side effect)도 존재해서는 안됩니다. 올바르게 구현한 경우 GET, HEAD, PUT, DELETE 메서드는 멱등성을 가지며, POST 메서드는 그렇지 않습니다. 모든 안전한 메서드는 멱등성도 가집니다.

안정성
HTTP는 안전한 메서드라 불리는 메서드의 집합이다.
안전한 메서드의 목적은 서버에 어떤 영향을 줄 수 있는 안전하지 않은 메서드가 사용될 때 사용자들에게 그 사실을 알려줄 수 있도록 하는 것이다.

캐시 가능성
향후 재사용을 위해 이에 대한 응답을 저장할 수 있음을 나타낸다.

메소드명 안정성 멱등성 캐시가능성
GET O O O
POST X X X
PUT X O X
DELETE X O X

참고 사이트 

https://www.redhat.com/ko/topics/api/what-is-a-rest-api

https://developer.mozilla.org/ko/docs/Web/HTTP/Methods

https://restfulapi.net/http-methods/

http://www.ktword.co.kr/test/view/view.php?m_temp1=3791 

https://developer.mozilla.org/ko/docs/Glossary/Idempotent

'CS > Network' 카테고리의 다른 글

[Network] OSI 7계층  (0) 2020.02.23
[Network] web socket 통신과 http 통신  (0) 2019.09.20
[Network] 스위치의 종류, 포트, 패킷  (0) 2019.09.20