Openstack Restful Api

最近听到很多平台说在提供Restful API,例如OpenStack就是设计这样的API,淘宝的飞天对外提供的也是Restful API。那么到底什么才是Restful API了,带着这些问题在网上翻阅了一遍,记录在此。

首次大家可以参考这个链接来掌握Restful概念,文章开头写的很有启发性,网站即软件。Rest是由Roy Thomas Fielding大神在他博士论文中提出的,他在自己的论文摘要中写道。

本文研究计算机科学两大前沿—-软件和网络—-的交叉点。长期以来,软件研究主要关注软件设计的分类、设计方法的演化,很少客观地评估不同的设计选择对系统行为的影响。而相反地,网络研究主要关注系统之间通信行为的细节、如何改进特定通信机制的表现,常常忽视了一个事实 ,那就是改变应用程序的互动风格比改变互动协议,对整体表现有更大的影响。我这篇文章的写作目的,就是想在符合架构原理的前提下,理解和评估以网络为基础的应用软件的架构设计,得到一个功能强、性能好、适宜通信的架构。

Rest即Representational State Transfer,中文大家翻译成表述性状态转移。上面链接出来的博客解释的很清晰,Restful最大的两个特点是:

  • 无状态的: 客户端与服务器端的交互请求之间是无状态的,每个请求都必须包含理解请求的所必须信息,没有上下文,例如服务器重启了,也不影响这一次请求

  • 资源:在Restful的角度看来,Web上的所有东西本质上都是资源,例如一张照片,一条记录等等,每个资源都使用URI得到唯一的地址。对于资源,可以使用四个HTTP动词来操作,GET POST DELETE PUT。使用HTTP这四个动词就可以很好的处理应用程序需求,如CRUD操作。

举一个具体的例子来展示到底是如何利用HTTP 头中的这四个动词来完成CRUD操作。

需要深刻的理解这两点,尤其是资源两字,精髓所在,然后再看OpenStack中的API设计就更加清晰明了。

注意,上面给出的博客还提到了Restful API设计是存在的两点误区,URI中不能包含动词,URI中包含版本,大家具体的看那篇博文。

对Restful API有了一个基础的了解,那么我们来看通过URL是怎样映射到具体的应用程序操作函数上了。在OpenStack中的API Daemon都会有一个Router类,来构建资源与URL直接的映射关系,完成从接收到URL请求然后映射到具体的函数上执行的整个过程。

这就要了解Python 中的Routes模块。

Routes 是一个python重新实现的Rails routes system,用来将urls映射到应用具体的action上,相反的,还生成url。由于Routes是Rails routes system的python实现,并且网上关于Routes的文档很少,故从rails的routes system入手,就能很好的理解Routes库了。

首先看一个简单的例子,就明白routes的作用,

例如浏览器接收到下面的HTTP请求,GET /instances/1Rails的路由请求则负责将此请求解析后dispatch来代码中的具体某个函数,完成调用,例如返回虚拟机的信息。

下面的内容参考于此处

Rails支持多种URL路径,包括RESTful路径,命名路径,嵌套路径,常规路径等,其中RESTful路径是Rails默认的标准路由方式)。

  • RESTful路径:前面我们多次强调关键在于理解在restful的角度来看,web上的所有东西本质上是资源。前面也的图片也提到了将photos视为一种资源,结合HTTP动词和RESTful URL之后,路由引擎将URL映射到相应的Controller上去,然后调用对应的函数做处理。

  • 嵌套路径:可以在一个resource中包含另一个resource。

其他路径的解释参考上面给出的链接。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值