RESTful(Representational State Transfer)은 웹 서비스 설계 원칙, 웹을 통해 데이터를 전송하는 데 사용되는 아키텍처 스타일.
GET: 자원을 조회합니다.POST: 새로운 자원을 생성.PUT: 자원을 업데이트하거나 새로운 자원을 생성.DELETE: 자원을 삭제.RESTful 설계 원칙을 충실히 이행한 예제 코드를 아래에 제시하겠습니다.
이 예제는 간단한 블로그 게시물 관리 시스템을 가정하고 있습니다.
자원(Resouces): 게시물(posts)은 자원입니다.
HTTP 메서드: 다음과 같이 HTTP 메서드를 사용하여 게시물 관련 작업을 수행합니다.
GET /posts: 모든 게시물 조회
GET /posts/{id}: 특정 ID의 게시물 조회
POST /posts: 새로운 게시물 생성
PUT /posts/{id}: 특정 ID의 게시물 업데이트
DELETE /posts/{id}: 특정 ID의 게시물 삭제
표현(Representation): JSON 형식을 사용하여 게시물 데이터를 표현합니다.
상태(Stateless): 서버는 클라이언트의 상태를 관리하지 않으며, 모든 요청은 필요한 정보를 포함해야 합니다.
이제 예제 코드를 보여드리겠습니다. 이 코드는 Node.js와 Express.js를 사용한 간단한 서버 코드입니다.
const express = require('express');
const bodyParser = require('body-parser');
const app = express();
const PORT = 3000;
// 미들웨어 설정
app.use(bodyParser.json());
// 블로그 게시물 데이터
let posts = [
{ id: 1, title: '첫 번째 게시물', content: '안녕하세요. 첫 번째 게시물입니다.' },
{ id: 2, title: '두 번째 게시물', content: '안녕하세요. 두 번째 게시물입니다.' },
];
// 모든 게시물 조회
app.get('/posts', (req, res) => {
res.json(posts);
});
// 특정 ID의 게시물 조회
app.get('/posts/:id', (req, res) => {
const id = parseInt(req.params.id);
const post = posts.find(post => post.id === id);
if (!post) {
res.status(404).json({ error: '게시물을 찾을 수 없습니다.' });
} else {
res.json(post);
}
});
// 새로운 게시물 생성
app.post('/posts', (req, res) => {
const newPost = req.body;
newPost.id = Date.now(); // 임시로 생성한 ID를 사용
posts.push(newPost);
res.status(201).json(newPost);
});
// 특정 ID의 게시물 업데이트
app.put('/posts/:id', (req, res) => {
const id = parseInt(req.params.id);
const updatedPost = req.body;
const index = posts.findIndex(post => post.id === id);
if (index === -1) {
res.status(404).json({ error: '게시물을 찾을 수 없습니다.' });
} else {
posts[index] = { ...posts[index], ...updatedPost };
res.json(posts[index]);
}
});
// 특정 ID의 게시물 삭제
app.delete('/posts/:id', (req, res) => {
const id = parseInt(req.params.id);
const index = posts.findIndex(post => post.id === id);
if (index === -1) {
res.status(404).json({ error: '게시물을 찾을 수 없습니다.' });
} else {
posts.splice(index, 1);
res.sendStatus(204); // No Content
}
});
app.listen(PORT, () => {
console.log(`서버가 포트 ${PORT}에서 실행 중입니다.`);
});