在此我用生活上的例子为大家解释下Restful是什么.
假如我们去KFC点餐,用伪代码形式实现我的行为
Level 0 面向前台
比如现在我要去前台点餐,可以用以下伪代码实现
{
"addOrder": {
"orderName" : "Hamburger"
}
}
我们通过这段文字,告诉前台新增一笔订单,订单是一个汉堡.接着前台返回给我们一串回复:
{
"orderId": "9527"
}
这样我们等着前台喊'9527'用户可以取餐了,我们就可以开吃了.
不过在这之前假如我有一张会员卡,我点餐之前就可以用会员卡来购买产品,但是我需要先查询下我卡内余额,我向前台发出下面一串文字,查询卡号为336699的余额.
{
"queryBalance": {
"cardId": "336699"
}
}
查询结果返回来了,很悲吹没钱了...
{
"balance": "0"
}
那现在我跟前台说这个汉堡不要了,我回复以下文字
{
"deleteOrder": {
"orderId": "9527"
}
}
把订单取消了
Level 1 面向资源
现在都是互联网时代KFC引进了自主点餐机,只需输入相关指令我们可以不通过前台就能实现点餐;更改订单以及取消订单的功能那咱们就来试试吧.
我在点餐机上输入:
/orders
{
"addOrder": {
"orderName": "Hamburger"
}
}
这里照比之前点餐多了'/orders',这个表示我们这个请求时发给哪个资源,订单其实就是一种资源接着点餐机会返回给我们一个订单编号
{
"orderId": "9527"
}
下面我们要查询会员卡余额,我们可以把资源改变成'cards'
/cards
{
"queryBalance": {
"cardId": "336699"
}
}
接下来我们取消订单,不用说也知道应该向哪个资源发送请求了吧'/orders'
/orders
{
"deleteOrder": {
"orderId": "9527"
}
}
Level 2 打上标签
后来我去KFC发现他们的自动点餐机更新了,多了几个选项'OPST';'GET';'DELETE';'PUT'每个按键上面有提示分别是'增加订单';'会员查询';'删除订单';'修改订单'这样更加方便了不用输入那么多指令,只需点击按钮在进行相关选择就可以了.
比如现在还是点一份汉堡
POST /orders
{
"orderName": "Hamburger"
}
请求的内容简洁多啦,不用在点餐机输入addOrder,看到POST就知道是新增,点餐机返回的内容还是一样
{
"orderId": "9527"
}
然后是查询会员卡余额
GET /cards
{
"cardId": "336699"
}
接着取消订单就是
DELETE /orders
{
"orderId": "9527"
}
用白话讲了下Restful,Level0和Level1最大的区别,就是Level1拥有了Restful的第一个特征——面向资源
其实Level0和Level1,都很Low,他们都只是把HTTP当做一个传输的通道,没有把HTTP当做一种传输协议。
Level2,真正将HTTP作为了一种传输协议,最直观的一点就是Level2使用了HTTP动词,GET/PUT/POST/DELETE....,这些都是HTTP的规范,规范的作用自然是重大的,其实通过这篇文章不难发现,做到了Level2,也就是面向资源和使用Http动词,就已经很Restful了。Restful本身也不是一种规范,我们可以用“风格"来形容它。
强调一点,Restful对数据格式没有限制,就算你用的是XML或者其他格式,只要符合上面提到的几个特征,也算Restful。
|
|