A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

崔越

初级黑马

  • 黑马币:23

  • 帖子:8

  • 精华:0

© 崔越 初级黑马   /  2018-3-30 13:26  /  454 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在此我用生活上的例子为大家解释下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。




0 个回复

您需要登录后才可以回帖 登录 | 加入黑马