RESTful 的概念一直很混乱,有人说我没有理解 RESTful?好吧,无论我理不理解,我只想把我理解的东西分享出来而已。我觉得 RESTful 就是 HTTP 上的面向对象风格。它的归类化、层次化等做法使设计出来的 API 像一个面向对象的封装一样更易用。
更细地说吧,RESTful 的风格是把 URL 变成了对象的引用链,把 HTTP 方法作为对象的方法,把 Request Body 和 Query String 作为方法的参数、把响应的状态信息和实体作为方法的返回值。甚至我们还能看到继承的身影,但由于 URL 的约束力有限,所以没法在语法上做强约定。
比如对某个 JavaScript 对象的操作我们可以映射到这么一套 RESTful 风格的 API 上
var data = {};
var primaryKey = 0;
// POST /data \n\n a=2&b=2
// 201 Created \n\n id=1
data[++primaryKey] = { a: 1, b: 2 };
var id = primaryKey;
// PUT /data/1/a \n\n 233
// 204 No Content
data[id].a = 233;
// PUT /data/1/b \n\n 332
// 204 No Content
data[id].b = 332;
// GET /data/1
// 200 OK \n\n a=233&b=332
data[id];
// DELETE /data/1
// 204 No Content
delete data[id];
上面的例子只是展示最基本的增删改查,有些方面可能并不恰当。比如 POST 操作创建的可能是一个对象,而这个对象里可能有引用了另一个列表:
var users = [];
var primaryKey = 0;
var User = function(userid, options) {
this.userid = userid;
this.usernam = options.username;
this.password = options.passwrod;
this.score = 100;
};
User.prototype.increment = {
post: function(options) {
this.score += options.score;
}
};
// POST /users \n\n username=test&password=xxx
// 201 Created \n\n userid=1
var userid = ++primaryKey;
var user = new User(userid, { username: "test", password: "xxx" });
users[userid] = user;
// POST /users/1/increment \n\n score=133
// 204 No Content
users[userid].increment.post({ score: 133 });
这么一比较就会发现,RESTful 风格的本质其实就是把结构体的操作映射到了 HTTP 操作中。我们在开发程序时会使用面向对象的风格就是因为它简单易读,使用 RESTful 风格的 API 也完全是一样的目的。不过上面的例子中还是有一些很奇葩的东西在里面,那是因为 JavaScript 的对象体系本身有点奇葩。不过无论多奇葩,至少上面这些例子读起来是不太费力的。
日期:2015年04月21日
标签: 广州网站设计公司 、 广州网站设计 、 广州网站建设公司 、 广州网站建设 、 广州网站制作公司 、 广州网站制作 、 高端网站设计 、 高端网站建设 、 广州高端网站设计 、 广州高端网站建设