Roy Fielding의 2000년 논문에서 처음 소개 - REST(REpresentatilnal State Transfer)
발표 당시의 웹이 HTTP의 설계 상 우수성을 제대로 사용하지 못하고 있는 상황
웹의 장점을 최대한 활용할 수 있는 아키텍쳐로 소개
HTTP 프로토콜의 의도에 맞게 디자인하도록 유도RESTful
: REST의 기본 원칙을 성실히 지킨 서비스 디자인
REST API 중심 규칙
1. URI: 정보의 자원을 표현
# bad
GET /getTodos/1
GET /todos/show/1
# good
GET /todos/1
- 리소스명: 동사 < 명사
- get 같은 행위에 대한 표현 X
2. 자원에 대한 행위: HTTP Method
로 표현
# bad
GET /todos/delete/1
# good
DELETE /todos/1
Method | Action | 역할 | 페이로드 |
GET |
index / retrieve | 모든/특정 리소스 조회 | X |
POST |
create | 리소스 생성 | O |
PUT |
replace | 리소스 전체 교체 |
O |
PATCH |
modify | 리소스 일부 수정 |
O |
DELETE |
delete | 모든/특정 리소스 삭제 | X |
REST API의 구성
REST는 자체 표현 구조(Self-descriptiveness)로 구성되어 REST API만으로 요청을 이해할 수 있다.
구성 요소 | 내용 | 표현 방법 |
Resource | 자원 | HTTP URI |
Verb | 자원에 대한 행위 | HTTP Method |
Representations | 자원에 대한 행위의 내용 | HTTP Message Pay Load |
REST API Example
db.json
{
"teams": [
{ "id": 1, "name": "Whyrano", "completed": false },
{ "id": 2, "name": "GOD", "completed": true },
{ "id": 3, "name": "Tomato", "completed": false }
]
}
package.json
{
"name": "rest-api-exam",
"version": "1.0.0",
"description": "",
"scripts": {
"start": "json-server --watch db.json --port 5000"
},
"dependencies": {
"json-server": "^0.15.0"
}
}
npm script 사용해 json-server 실행
$ npm start
GET
모든 team 조회(index)
$ curl -X GET http://localhost:5000/teams
[
{
"id": 1,
"name": "Whyrano",
"completed": false
},
{
"id": 2,
"name": "GOD",
"completed": true
},
{
"id": 3,
"name": "Tomato",
"completed": false
}
]
teams 리소스에서 id를 사용해 특정 team 조회(retrieve)
$ curl -X GET http://localhost:5000/teams/1
{
"id": 1,
"name": "Whyrano",
"completed": false
}
const xhr = new XMLHttpRequest();
xhr.open('GET', 'http://localhost:5000/teams/1');
xhr.send();
xhr.onreadystatechange = function (e) {
if (xhr.readyState !== XMLHttpRequest.DONE) return;
if(xhr.status === 200) {
console.log(xhr.responseText);
} else {
console.log("Error!");
}
};
이런 방식으로 GET
, POST
, PUT
, PATCH
, DELETE
도 확인 가능
'CS' 카테고리의 다른 글
해시 테이블(Hash Table), 해시 맵(Hash Map) (2) | 2024.08.16 |
---|---|
[혼자 공부하는 컴퓨터 구조+운영체제]02 (0) | 2024.08.15 |
[혼자 공부하는 컴퓨터 구조+운영체제]01 (0) | 2024.08.15 |