RESTful与面向对象

发布时间:2024-10-21 点击:35
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=1data[++primarykey] = { a: 1, b: 2 };var id = primarykey;
// put /data/1/a \n\n 233// 204 no contentdata[id].a = 233;
// put /data/1/b \n\n 332// 204 no contentdata[id].b = 332;
// get /data/1// 200 ok \n\n a=233&b=332data[id];
// delete /data/1// 204 no contentdelete 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=1var userid = ++primarykey;var user = new user(userid, { username: test, password: xxx });users[userid] = user;
// post /users/1/increment \n\n score=133// 204 no contentusers[userid].increment.post({ score: 133 });这么一比较就会发现,restful 风格的本质其实就是把结构体的操作映射到了 http 操作中。我们在开发程序时会使用面向对象的风格就是因为它简单易读,使用 restful 风格的 api 也完全是一样的目的。不过上面的例子中还是有一些很奇葩的东西在里面,那是因为 javascript 的对象体系本身有点奇葩。不过无论多奇葩,至少上面这些例子读起来是不太费力的。

从哪些方面提高用户体验度
网站规划和网站缔造
视觉复杂的网站通常不如简单设计的网站
若何获得搜寻引擎的思疑
北京网站制作过程中应该注意哪些问题
网站建设方案需要注意哪些事项?
502badgateway是什么意思(怎么解决502)
SEO优化方法