๐ฏ ํ์ต ๋ชฉํ
- RESTful API์ ๊ธฐ๋ณธ ์์น์ ์ดํดํ๋ค.
- Express ์๋ฒ๋ฅผ ๋ผ์ฐํฐ/ํธ๋ค๋ฌ ํ์ผ๋ก ๋ถ๋ฆฌํ์ฌ ๊ตฌ์กฐํํ๋ค.
โ 1. RESTful ๊ตฌ์กฐ๋?
RESTful API๋ URL๊ณผ HTTP ๋ฉ์๋๋ฅผ ์กฐํฉํ์ฌ ์์์ ์๋ฏธ ์๊ฒ ์ค๊ณํ๋ ๋ฐฉ์์ ๋๋ค.
| ๋ฉ์๋ | ๊ฒฝ๋ก | ์๋ฏธ |
|---|---|---|
GET |
/todos |
๋ชจ๋ ํ ์ผ ์กฐํ |
POST |
/todos |
์ ํ ์ผ ๋ฑ๋ก |
PUT |
/todos/:id |
ํน์ ํ ์ผ ์์ |
DELETE |
/todos/:id |
ํน์ ํ ์ผ ์ญ์ |
โ "๋์ฌ"๊ฐ ์๋ "์์ ์ค์ฌ(๋ช ์ฌ)"์ URL ์ค๊ณ๊ฐ ํต์ฌ์ ๋๋ค.
โ 2. ํด๋ ๊ตฌ์กฐ ๋ฆฌํฉํ ๋ง
vue2-api/
โโโ server.js # ์๋ฒ ์คํ ์ํธ๋ฆฌ
โโโ routes/
โ โโโ todos.js # ๋ผ์ฐํฐ ์ ์
โโโ data/
โ โโโ todos.json # ์ ์ฅ๋๋ JSON ํ์ผ
โ
3. ๋ผ์ฐํฐ ๋ถ๋ฆฌ โ routes/todos.js
// routes/todos.js
const express = require('express')
const fs = require('fs').promises
const path = require('path')
const router = express.Router()
const DATA_FILE = path.join(__dirname, '../data/todos.json')
let todos = []
// ๐ฆ ๋ฐ์ดํฐ ๋ก๋ฉ ๋ฐ ์ ์ฅ ํจ์
const loadTodos = async () => {
try {
const data = await fs.readFile(DATA_FILE, 'utf-8')
todos = JSON.parse(data)
} catch {
todos = []
}
}
const saveTodos = async () => {
await fs.writeFile(DATA_FILE, JSON.stringify(todos, null, 2))
}
// โ
GET /todos
router.get('/', async (req, res) => {
res.json(todos)
})
// โ
POST /todos
router.post('/', async (req, res) => {
const newTodo = {
id: Date.now(),
title: req.body.title,
completed: false
}
todos.unshift(newTodo)
await saveTodos()
res.status(201).json(newTodo)
})
// โ
DELETE /todos/:id
router.delete('/:id', async (req, res) => {
const id = Number(req.params.id)
todos = todos.filter(todo => todo.id !== id)
await saveTodos()
res.sendStatus(204)
})
// โ
PUT /todos/:id
router.put('/:id', async (req, res) => {
const id = Number(req.params.id)
const { title } = req.body
todos = todos.map(todo =>
todo.id === id ? { ...todo, title } : todo
)
await saveTodos()
res.sendStatus(200)
})
// ์ต์ด 1ํ ๋ก๋
loadTodos()
module.exports = router
โ
4. ์๋ฒ ์ง์
์ โ server.js
const express = require('express')
const cors = require('cors')
const todosRouter = require('./routes/todos')
const app = express()
const PORT = 3000
app.use(cors())
app.use(express.json())
// โ
RESTful router ๋ฑ๋ก
app.use('/todos', todosRouter)
app.listen(PORT, () => {
console.log(`๐ ์๋ฒ ์คํ ์ค: http://localhost:${PORT}`)
})
โ 5. ์คํ ๋ฐฉ๋ฒ
์คํํ๊ธฐ ์ ํ๋ก์ ํธ ๋ฃจํธ์ data ํด๋๋ฅผ ๋ง๋ญ๋๋ค. data ํด๋๊ฐ ์์ผ๋ฉด ๋ฐ์ดํฐ๋ ์ ์ฅ๋์ง๋ง ์๋ฒ์์ ์๋ฌ๊ฐ ๋ฉ๋๋ค.
node server.js
๐ง ํต์ฌ ์์ฝ
| ๊ตฌ์ฑ ์์ | ์ค๋ช |
|---|---|
routes/todos.js |
API ๊ฒฝ๋ก๋ณ ๋ผ์ฐํฐ ๋ด๋น |
server.js |
์๋ฒ ์ ์ฒด ๊ตฌ์ฑ ๋ฐ ๋ผ์ฐํฐ ์ฐ๊ฒฐ |
todos.json |
๋ฐ์ดํฐ ์์ ์ ์ฅ์ |
| RESTful ์์น | ๊ฒฝ๋ก๋ ์์, ๋ฉ์๋๋ ํ๋์ ์๋ฏธ |
BE ์ ์ฅ์
๐ฌ ๋๊ธ
โป ๋ก๊ทธ์ธ ํ ๋๊ธ์ ์์ฑํ ์ ์์ต๋๋ค.