我所理解的REST API

简介: 打开微信扫一扫,关注微信公众号【数据与算法联盟】转载请注明出处:http://blog.csdn.net/gamer_gyt 博主微博:http://weibo.com/234654758 (欢迎互撩) Github:https://github.


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

转载请注明出处: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 入门介绍

                  


相关文章
|
3月前
|
JSON API 开发工具
【Azure 应用服务】调用Azure REST API来获取 App Service的访问限制信息(Access Restrictions)以及修改
【Azure 应用服务】调用Azure REST API来获取 App Service的访问限制信息(Access Restrictions)以及修改
|
15天前
|
缓存 API 网络架构
掌握现代API开发:GraphQL vs REST
【10月更文挑战第24天】本文深入探讨了现代API开发中两种主流技术——GraphQL和REST的设计理念、技术特点及实际开发中的对比分析。GraphQL通过声明式数据请求和强类型系统提供更高的灵活性和性能,而REST则以其无状态特性和成熟的生态系统见长。文章还讨论了两者在客户端-服务器交互、安全性和工具支持方面的优劣,帮助开发者根据项目需求做出明智选择。
|
2月前
|
JSON 中间件 API
开发REST API3-11
开发REST API3-11
|
2月前
|
JSON JavaScript API
编写REST API
编写REST API
60 2
|
1月前
|
Java API Maven
使用 Smart-doc 记录 Spring REST API
使用 Smart-doc 记录 Spring REST API
40 0
|
3月前
|
存储 JSON API
【Azure 存储服务】使用REST API操作Azure Storage Table,删除数据(Delete Entity)
【Azure 存储服务】使用REST API操作Azure Storage Table,删除数据(Delete Entity)
【Azure 存储服务】使用REST API操作Azure Storage Table,删除数据(Delete Entity)
|
3月前
|
XML 安全 API
REST 和 SOAP API 有什么区别?
【8月更文挑战第31天】
173 0
|
3月前
|
JSON API 数据安全/隐私保护
哇塞!Django REST framework 太逆天啦!构建 API 服务从未如此轻松,你还不来试试?
【8月更文挑战第31天】Django REST framework(DRF)是基于Django框架的高效Web API开发工具,提供序列化、视图集、路由等功能,简化API构建流程。使用DRF可轻松实现数据的序列化与反序列化,并支持权限管理和认证机制以保障API安全。安装DRF只需通过`pip install djangorestframework`命令。要创建基本项目,先安装Django并创建新应用,定义模型、序列化器及视图集,最后配置路由。测试API时,可通过Postman发送HTTP请求验证功能。无论项目大小,DRF均能提供强大支持。
40 0
|
3月前
|
中间件 API 网络架构
Django后端架构开发:从匿名用户API节流到REST自定义认证
Django后端架构开发:从匿名用户API节流到REST自定义认证
38 0
|
3月前
|
API 网络架构 C++
【Azure Key Vault】使用REST API调用Azure Key Vault Secret的示例步骤
【Azure Key Vault】使用REST API调用Azure Key Vault Secret的示例步骤

热门文章

最新文章