json-server는 json 파일을 사용해서 간단한 시뮬레이션을 위한 REST API Mock server를 구축할 수 있는 툴 입니다. - PoiemaWeb
npm install -g json-server
프로젝트 루프 폴더에 db.json 파일을 생성합니다.
그리고 아래의 데이터를 저장해 줍다.
{
"posts": [
{ "id": 1, "title": "json-server", "author": "typicode" }
],
"comments": [
{ "id": 1, "body": "some comment", "postId": 1 }
],
"profile": { "name": "typicode" }
}
터미널에서 아래의 코드를 입력해여 JSON server를 실행합니다.
json-server --watch db.json
실행결과
$ json-server --watch db.json
\{^_^}/ hi!
Loading db.json
Oops, db.json doesn't seem to exist
Creating db.json with some default data
Done
Resources
http://localhost:3000/posts
http://localhost:3000/comments
http://localhost:3000/profile
Home
http://localhost:3000
Type s + enter at any time to create a snapshot of the database
Watching...
이제 Resources에 있는 url중에
http://localhost:3000/posts 을 방문하면 db.json에 넣은 데이터중에 key가 posts인 value 값을 얻을 수 있습니다.
[
{
id: 1,
title: "json-server",
author: "typicode"
}
]
HTTP(HyperText Transfer Protocol)는 W3 상에서 정보를 주고받을 수 있는 프로토콜이다. - 위키백과
대표적인 HTTP Method는 아래와 같습니다.
const xhr = new XMLHttpRequest();
const method = 'POST'; //'GET', 'PUT', 'DELETE' 메서드가 가능
const url = '원하는 url';
xhr.open(method, url); // 문법: open(HTTP Method, Url)
xhr.setRequestHeader('content-type', 'application/json');
-서버로 부터 응답을 받으면 onload() 메서드로 응답 받은 데이터를 사용합니다.
xhr.onload = () => {
//...
}
function getPostData() {
const xhr = new XMLHttpRequest(); // XMLHttpRequest 객체 생성
xhr.open("GET", "http://localhost:3000/posts");
xhr.setRequestHeader("content-type", "application/json");
xhr.send();
// 서버로 부터 응답 받으면 실행
xhr.onload = () => {
if (xhr.status === 200) {
const res = JSON.parse(xhr.response);
console.log(res);
} else {
console.log(xhr.status, xhr.statusText);
}
}
}
getPostData();
실행결과
[{…}]
0: {id: 1, title: 'json-server', author: 'typicode'}
length: 1
[[Prototype]]: Array(0)
<body>
<button onclick="postData()">생성</button>
<script>
function postData() {
const xhr = new XMLHttpRequest();
xhr.open("POST", "http://localhost:3000/posts");
xhr.setRequestHeader("content-type", "application/json; charset=UTF-8")
//db.json 파일의 posts 객체에 있는 key가 id인 값은 유일한 값이라서 안넣어줘도 자동으로 생성됨.
const data = { title: 'JavaScript', author: 'John Doe' };
xhr.send(JSON.stringify(data));
xhr.onload = () => {
if (xhr.status === 201) {
const res = JSON.parse(xhr.response);
console.log(res);
} else {
console.log(xhr.status, xhr.statusText);
}
}
}
</script>
</body>
getPostData();
/* 실행결과
** (2) [{…}, {…}]
** 0: {id: 1, title: 'json-server', author: 'typicode'}
** 1: {title: 'JavaScript', author: 'John Doe', id: 2}
** length: 2
** [[Prototype]]: Array(0)
*/
<body>
<button onclick="putData()">수정</button>
<script>
function putData() {
const xhr = new XMLHttpRequest();
xhr.open("PUT", "http://localhost:3000/posts/2");
xhr.setRequestHeader("content-type", "application/json; charset=UTF-8");
const data = { title: "HTML", author: "Heung Min SON" };
xhr.send(JSON.stringify(data));
xhr.onload = () => {
if (xhr.status === 200) {
const res = JSON.parse(xhr.response);
console.log(res);
} else {
console.log(xhr.status, xhr.statusText);
}
}
}
</script>
</body>
getPostData();
/* 실행결과
** (2) [{…}, {…}]
** 0: {id: 1, title: 'json-server', author: 'typicode'}
** 1: {title: 'HTML', author: 'John Doe', id: 2}
** length: 2
** [[Prototype]]: Array(0)
*/
<body>
<button onclick="deleteData()">삭제</button>
<script>
function deleteData() {
const xhr = new XMLHttpRequest();
xhr.open("DELETE", "http://localhost:3000/posts/2");
xhr.getResponseHeader("content-type", "application/json; charset=UTF-8")
xhr.send();
xhr.onload = () => {
if (xhr.status === 200) {
const res = JSON.parse(xhr.response);
console.log(res);
} else {
console.log(xhr.status, xhr.statusText);
}
}
}
</script>
</body>
getPostData();
/* 실행결과
** (1) [{…}]
** 0: {id: 1, title: 'json-server', author: 'typicode'}
** length: 1
** [[Prototype]]: Array(0)
*/