RESTful in Action
Summay
練習使用RESTful Web Servicet技術打造一個簡單書藉管理Web應用程式。
REST & RESTFul Web Services
REST (Reprsentational State Transfer)是軟體構設計風格,並不是標準。RESTful Web Services是使用HTTP協定,並遵循REST原則的Web服務。
動手實作
修改package.json
這次實作會用到express、jade、mongoose等packages,另外,superagent和expect.js是用來測試時使用。
1 |
|
MongoDB
先確定好MongoDB有安裝成功,建立Book Model,目前只有三個欄位,分別是title、isbn,以及description。 (_id是MongoDB自動產生)
1 |
|
RESTful API規格
功能 | URL | HTTP Method | Request | Response |
---|---|---|---|---|
新增 | /books | POST | Book JSON | — |
刪除 | /books/:id | DELETE | — | — |
修改 | /books/:id | PUT | Book JSON | — |
查詢 | /books/:id | GET | — | Book JSON |
列表 | /books | GET | — | Book JSON |
Express Server
- server.js
1 |
|
按照上面的RESTful API規格,主要負責MongoDB的CRUD。
1 |
|
routes/api.js
GET /books
傳回全部Book JSON。1
2
3
4
5
6
7
8
exports.findAll = function(req,res,next){
Book.find(function(err,books){
res.send({book:books});
});
};
GET /books/:id
以id為查詢條件,傳回單筆Book JSON。
1
2
3
4
5
6
7
exports.findByID = function(req,res,next){
Book.findOne({_id:req.params.id},function(err,book){
res.send({book:book});
});
};
POST /books
取得Book資料後寫入MongoDB。
1
2
3
4
5
6
7
8
exports.post = function(req,res){
var book = new Book({title:req.body.book.title,isbn:req.body.book.isbn,description:req.body.book.description});
book.save(function(err,book){
res.send({book:book});
});
};
PUT /books/:id
修改:id的Book資料 。
1
2
3
4
5
6
7
8
9
exports.updates = function(req,res,next){
Book.update({_id:req.params.id},{$set:{description:req.body.book.description}},function(err,numberAffected,raw){
if (err)
console.log(err);
res.send(200);
});
};
DELETE /books/:id
刪除:id的Book資料1
2
3
4
5
6
7exports.removeByID = function(req,res,next){
Book.remove({_id:req.params.id},function(err){
if (err)
next(err);
res.send(200);
});
};