Web 技术研究所

我一直坚信着,Web 将会成为未来应用程序的主流

RESTful 与面向对象

  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 的对象体系本身有点奇葩。不过无论多奇葩,至少上面这些例子读起来是不太费力的。
网名:
3.80.32.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^