我所理解的REST API

  1. 云栖社区>
  2. 博客>
  3. 正文

我所理解的REST API

thinkgamer.cn 2016-09-13 13:54:00 浏览954
展开阅读全文


打开微信扫一扫,关注微信公众号【数据与算法联盟】

转载请注明出处:http://blog.csdn.net/gamer_gyt 
博主微博:http://weibo.com/234654758 (欢迎互撩) 
Github:https://github.com/thinkgamer

===============================================================================

写在前边的话:

       对于REST API的介绍和分析已经有很多文章了,我相信他们写的都很好,那么为什么我还要写这篇博客呢,因为我看了挺多资料之后对REST API这个东西还是一知半解,什么是REST?什么是API?这个我理解了,但是一合起来,我就有点蒙圈了,下边谈谈我的理解吧


1:曾经我眼中的API

      在未查看资料之前我对API的定义是这样的,就像python里的package一样,你导入一个package,然后你就可以使用他的各种函数

>>> import urllib
>>> url = "http://hadoop.apache.org/"
>>> page = urllib.urlopen(url).read()
      然后输入一个page,便是想要的内容了,后来才发现我太单纯了,真的是太单纯了

2:REST?

       网上查了挺多资料,才发现:

      REST:Representational State Transfer的缩写,参考阮一峰老师的理解便是”表现层状态转化“

      参考   《REST 入门介绍》一博文中的对REST的理解是这样描述的:

REST ( REpresentational State Transfer ),State Transfer 为 "状态传输" 或 "状态转移 ",Representational 中文有人翻译为"表征"、"具象",合起来就是 "表征状态传输" 或 "具象状态传输" 或 "表述性状态转移",不过,一般文章或技术文件都比较不会使用翻译后的中文来撰写,而是直接引用 REST 或 RESTful 来代表,因为 REST 一整个观念,想要只用六个中文字来完整表达真有难度。

REST 一词的出于《Architectural Styles and 
the Design of Network-based Software Architectures》论文,我们先简单从标题来看,它应该是一种架构样式 (Architectural Styles) 与软件架构 (Software Architectures),而且是以网络 (Network-based) 为基础,重点就是:

  • 架构样式 (Architectural Styles)
  • 软件架构 (Software Architectures)
  • 网络 (Network-based) 为基础

REST 本身是设计风格而不是标准。REST 谈论一件非常重要的事,如何正确地使用 Web标准,例如,HTTP 和 URI。想要了解 REST 最好的方式就是思索与了解 Web 及其工作方式。如果你设计的应用程序能符合 REST 原则 (REST principles),这些符合 REST 原则的 REST 服务可称为 "RESTful web service" 也称 "RESTful Web API"。"-ful" 字尾强调它们的设计完全符合 REST 论文里的建议内容。

       资源(Resource)

      REST “表现层状态转化”中省略了主语,其实前提基础描述的是Resource,在web服务器里,他代表的就是服务器中的一个具体实体,一个具体信息,你可以通过url去访问他,比如说我有一篇博客叫《我所理解的REST API》,那么我可以直接通过该篇博客的id去定位到 该篇博客 http://blog.csdn.net/gamer_gyt/article/details/52105983,当然如果有另外一篇博客《带你走进Spark编程之Scala入门》这里我只要更换博客的id就可以了http://blog.csdn.net/gamer_gyt/article/details/52093924,所以这里resource就成了一个实体或者具体的信息的唯一标示符

      Representational(表现层)

      我认为就是Resource(资源)的一种表现形式,就像一段文本,我们可以保存成txt格式,也可以保存成data格式,也可以保存成html格式,这些保存的形式就是对文本(资源)的一种表现。URI只代表资源的实体,不代表他的形式。严格地说,有些网站最后的“.html”后缀名是不必要的,因为这个后缀名表示格式,属于“表现层”范畴,而URI应该只代表“资源”的位置,他的具体表现形式,应该在HTTP请求的头信息中用Accept和Content-Type字段指定,这两个字段才是对“表现层”的描述。

      State Transfer(状态转化)

      访问一个网站,就代表了客户端和服务器的一个互动过程,当你去访问web的时候肯定涉及到数据和状态的变化。互联网通信协议HTTP协议,是一个无状态协议,如果客户端想要操作服务器,必须通过某种手段,让服务器发生状态转化(State Transfer),而这种转化是建立在表现层之上的,所以就是“表现层状态转化”。

      RESTful服务

      基于REST的服务叫RESTful服务,REST不依赖于任何协议,但是几乎每个RESTful服务都使用HTTP作为底层协议。RESTful使用HTTP post(创建,更新)数据,读取,删除数据,使用HTTP实现CRUD(创建,读取,更新,删除)操作。

3:API?

      所谓的API就是 Application Programming Interface(应用程序编程接口),是一些预先定义好的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。

      那么针对web而言,我们看下所谓的API接口,还是最上边的例子,比如说我有一篇博客叫《我所理解的REST API》,那么我可以直接通过该篇博客的id去定位到 该篇博客 http://blog.csdn.net/gamer_gyt/article/details/52105983,但这个结果是html页面,他同时混合包含了Blog的数据和blog展示两个部分,对于用户而言,阅读起来肯定是没有问题,但是如果是机器读取呢,就很难从html中解析出blog数据。

      如果一个URL返回的不是HTML,而是机器能够直接解析的数据,这个url就可以看成是一个web API。比如说http://blog.csdn.net/v1/api/gamer_gyt/article/details/52105983(csdn并不存在这样的href,只是为了举例),如果能直接返回blog的数据,那么机器就可以直接读取

      

4:REST API?

       看完了REST和API,我们来看下REST API,REST就是一种设计API的模式,最常用的格式是JSON,由于JSON可以直接被javascript读取,所以用json编写的REST风格的API具有简单,易读,易用的特点。当然还有其他的一些格式,比如说XML,YAML等。

       REST的设计原则:参考这篇博客写的比较详细

       另外介绍一个python的REST API框架  Eve


     最后,由于自己暂时并不开发API ,所以对其实战还是不太懂,后期如果需要的话,我会更新该文章,增加一些API实战的例子


参考文章:

                  理解 RESTful架构

                  REST 入门介绍

                  


网友评论

登录后评论
0/500
评论
thinkgamer.cn
+ 关注