REST(REpresentational State Transfer)Web 是一种轻量级的服务模式,通常用于构建 Web API,例如国外的 Skydrive,Dropbox,Twitter,国内的新浪微博等,都利用这种方式来提供第三方的服务接口。
REST Web API 经常使用 http 或者 https 传输协议,我们可以看看 Dropbox 的 REST API 的例子:
GET https://api.dropbox.com/1/account/info
GET https://api.dropbox.com/1/metadata/sandbox/hello.txt
GET https://api-content.dropbox.com/1/files/sandbox/hello.txt
POST https://api-content.dropbox.com/1/files/sandbox/hello.txt
PUT https://api-content.dropbox.com/1/files_put/sandbox/hello.txt?param=val
可以看出,REST API 首先有一些 URI 地址,惟一的对应每一个资源,然后用 GET,POST,PUT 等方法来表示对某个资源读取,创建和修改等操作。
客户端和服务器之间还需要有确定数据格式,最常用的是 JSON(JavaScript Object Notation)格式。JSON 定义的数据结构是 JavaScript 数据结构的一个子集,容易阅读和编写,在其它语言中也很方便使用。例如:
{
"bytes": 0,
"path": "/Public",
"is_dir": true,
"contents": [
{
"size": "0 bytes",
"bytes": 0,
"path": "/Public/latest.txt",
"is_dir": false
},
{
"size": "0 bytes",
"bytes": 0,
"path": "/Public/history.txt",
"is_dir": false
}
],
"revision": 29007
}
可以看到, JSON 的语法和 JavaScript 的非常类似,需要注意的地方主要有:字符串只能用双引号,而对象的属性名必须用引号包含。
JavaScript 中的 JSON 对象只有两个方法:JSON.parse 和 JSON.stringify。JSON.parse 方法 将一个 JSON 字符串转化为 JavaScript 对象,而 JSON.stringify 方法将 JavaScript 对象转化为 JSON 字符串。由于 JavaScript 对象可能包含循环结构,因此 JSON.stringify(value, replacer, space) 方法包含一个 replacer 参数,用于选择性的转化 JavaScript 对象。例如:
function replacer(key, value) {
var omits = ['parent', 'previous', 'next'];
if (omits.indexOf(key) == -1) return value;
}
JSON.stringify(posts, replacer, 4);
上面的例子中,JSON.stringify 转换时将忽略 posts 对象及其子对象中的名称为 'parent','previous','next' 的属性。最后一个参数表示用 4 个空格缩进转换的结果。