REST ful
前后端分离、面向资源、无状态;
请求包含全部信息。
什么是 REST?
下面六条准则定义了一个 REST 系统的特征:
- 客户-服务器(Client-Server),提供服务的服务器和使用服务的客户需要被隔离对待。
- 无状态(Stateless),来自客户的每一个请求必须包含服务器处理该请求所需的所有信息。换句话说,服务器端不能存储来自某个客户的某个请求中的信息,并在该客户的其他请求中使用。
- 可缓存(Cachable),服务器必须让客户知道请求是否可以被缓存。(Ross:更详细解释请参考 理解本真的REST架构风格 以及 StackOverflow 的这个问题 中对缓存的解释。)
- 分层系统(Layered System),服务器和客户之间的通信必须被这样标准化:允许服务器和客户之间的中间层(Ross:代理,网关等)可以代替服务器对客户的请求进行回应,而且这些对客户来说不需要特别支持。
- 统一接口(Uniform Interface),客户和服务器之间通信的方法必须是统一化的。(Ross:GET,POST,PUT.DELETE, etc)
- 支持按需代码(Code-On-Demand,可选),服务器可以提供一些代码或者脚本(Ross:Javascrpt,flash,etc)并在客户的运行环境中执行。这条准则是这些准则中唯一不必必须满足的一条。(Ross:比如客户可以在客户端下载脚本生成密码访问服务器。)
什么是一个 RESTful 的 Web Service?
REST 架构最初被设计出来用于 World Wide Web 使用的 HTTP 协议。
RESTful Web Service 的核心概念在于对 Resources 的抽象。Resources 被 URIs (Uniform Resource Identifier) 表征。客户使用 HTTP 协议定义的方法发送请求给这些 URIs,然后相应的资源的状态就可能会发生变化。
RESTful API
实用的是如何正确地理解 RESTful架构和设计好RESTful API。
首先为什么要用RESTful结构呢?
大家都知道"古代"网页是前端后端融在一起的,比如之前的PHP,JSP等。在之前的桌面时代问题不大,但是近年来移动互联网的发展,各种类型的Client层出不穷,RESTful可以通过一套统一的接口为 Web,iOS和Android提供服务。另外对于广大平台来说,比如Facebook platform,微博开放平台,微信公共平台等,它们不需要有显式的前端,只需要一套提供服务的接口,于是RESTful更是它们最好的选择。在RESTful架构下:
。最后是要解放思想,Web端不再用之前典型的PHP或JSP架构,而是改为前段渲染和附带处理简单的商务逻辑(比如AngularJS或者BackBone的一些样例)。Web端和Server只使用上述定义的API来传递数据和改变数据状态。格式一般是JSON。iOS和Android同理可得。由此可见,Web,iOS,Android和第三方开发者变为平等的角色通过一套API来共同消费Server提供的服务。
看了很多答案,讲的很详细,但是初学者一般都看的不是很懂。
我在这里的答案主要解释什么是REST? 为什么要用REST?不包括具体该如何使用REST风格,你可以在网上看教程去学习相关知识。
要解释什么是REST,你应该先了解什么是API(Application Programming Interface,应用程序编程接口),形象一点说就是像一个公司比如腾讯,阿里巴巴之类,他们可以提供一个API,然后我们或者一些其他的小公司可以编一个软件去跟这个接口(API)进行相连或交互。举个例子,比如你可以用手机的其他软件分享内容到微信朋友圈或者新浪微博,这些软件就是与微信和微博的api进行了交互。
知道了API,那么就容易理解REST了。REST是什么呢? 它是一种架构风格,腾讯公司或其他公司建立API时要遵守的一种规则/风格,当然也有其他规则可以用。
现在稍微具体一下什么是REST架构风格。REST也就是Representational State Transfer(表现层状态转移)。要具体什么事REST,我们又必须提到Web(大神请忽略这里,因为我这篇是想带0基础的人入门的),因为REST是以Web为平台的。
Web是什么: 分布式信息系统为超文本文件和其他对象(资源)提供访问入口
资源是Web架构的关键点,需要 3个操作 识别(identify) 表示(represent) 交互(interact with),通过这三个操作,又引出三个概念uri(统一资源标识符包括url和urn)识别资源;representation (例如html,xml,图片,视频等等)表示资源;通过协议(包括http,ftp等等)与资源进行交互。
所以REST就是选择通过使用http协议和uri,利用client/server model对资源进行CRUD (Create/Read/Update/Delete)增删改查操作。
那么为什么要使用REST风格呢?肯定是因为它的优点,所以才选择使用它呀。因此现在先介绍它的优点,
要介绍它的优点又要提到它的六个限制,我看其他答案只提到了限制,但是没有写限制的好处,在这里我列出限制和它的好处:
1.客户-服务器(Client-Server)客户端服务器分离
优点,提高用户界面的便携性(操作简单)
通过简化服务器提高可伸缩性(高性能,低成本)
允许组件分别优化(可以让服务端和客户端分别进行改进和优化)
2.无状态(Stateless)
从客户端的每个请求要包含服务器所需要的所有信息
优点:
提高可见性(可以单独考虑每个请求)
提高了可靠性(更容易从局部故障中修复)
提高可扩展性(降低了服务器资源使用)
3.缓存(Cachable)
服务器返回信息必须被标记是否可以缓存,如果缓存,客户端可能会重用之前的信息发送请求。
优点:
减少交互次数
减少交互的平均延迟
4.分层系统(Layered System)
系统组件不需要知道与他交流组件之外的事情。封装服务,引入中间层。
优点:
限制了系统的复杂性
提高可扩展性
5.统一接口(Uniform Interface)
优点:
提高交互的可见性
鼓励单独改善组件
6.支持按需代码(Code-On-Demand 可选)
优点:
提高可扩展性
因为其他答案已经提到了一些概念,所以我没有多写。
推荐书籍 REST in practice有中文版的,如果英语没有达到像看中文一样,我还是推荐先看中文的,效率会高一点
如果去网上搜索网页,字数不多的文章,我建议看英文版的,写的会好一点。
REST ful的更多相关文章
- suffix word cy dom faction ful fold form out1
1★cy ﹎﹎﹎﹎性质,状态 2★ dom ﹎﹎﹎﹎领域,范围 1★ faction ﹎﹎﹎﹎达到什么样的状态 2★ ful ﹎﹎﹎﹎满,量 *******有~的 3★ fold ﹎﹎﹎﹎双, ...
- WCF WEB HTTP请求 WCF REST FUL
首先上点概念WCF 很好的支持了 REST 的开发, 而 RESTful 的服务通常是架构层面上的考虑. 因为它天生就具有很好的跨平台跨语言的集成能力,几乎所有的语言和网络平台都支持 HTTP 请求, ...
- Java | Spring Boot Swagger2 集成REST ful API 生成接口文档
Spring Boot Swagger2 集成REST ful API 生成接口文档 原文 简介 由于Spring Boot 的特性,用来开发 REST ful 变得非常容易,并且结合 Swagg ...
- .net 调用java rest ful api 实例
注意post的参数组合 HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest; request.Method = &quo ...
- 调用java rest ful 接口实例
HttpWebRequest request = WebRequest.Create("http://192.168.0.99:8080/wzh-webservice/rest/login? ...
- SQl中Left Join 、Right Join 、Inner Join与Ful Join
1 left join 左外连接:查询结果以左表数据为准.假如左表有四条数据,右表有三条数据,则查询结果为四条,且都是左表中有的数据. 例如: EMP表: SAL表: 左连接 左连接,表EMP是主表, ...
- Mysql table ful
http://ourmysql.com/archives/1327 http://blog.csdn.net/kevon_sun/article/details/7967728 http://my.o ...
- java web学习总结(二十六) -------------------JSP属性范围
所谓的属性范围就是一个属性设置之后,可以经过多少个其他页面后仍然可以访问的保存范围. 一.JSP属性范围 JSP中提供了四种属性范围,四种属性范围分别指以下四种: 当前页:一个属性只能在一个页面中取得 ...
- 初试ASP.NET Web API/MVC API(附Demo)
写在前面 HTTP RESTful 创建Web API 调用Web API 运行截图及Demo下载 ASP.NET Web API是一个框架,可以很容易构建达成了广泛的HTTP服务客户端,包括浏览 ...
随机推荐
- JavaSE 学习笔记之Import 导入(十二)
Import - 导入:类名称变长,写起来很麻烦.为了简化,使用了一个关键字:import,可以使用这个关键字导入指定包中的类.记住:实际开发时,到的哪个类就导入哪个类,不建议使用*. import ...
- 创建Spark执行环境SparkEnv
SparkDriver 用于提交用户的应用程序, 一.SparkConf 负责SparkContext的配置参数加载, 主要通过ConcurrentHashMap来维护各种`spark.*`的配置属性 ...
- 使用Java VisualVM配置Java应用程序/分析CPU或内存的使用情况(转)
以下内容翻译自(机翻):https://baptiste-wicht.com/posts/2010/07/profile-applications-java-visualvm.html 当您需要发现应 ...
- N天学习一个linux命令之xz
前言 最近使用gitbook写接口文档,gitbook需要nodejs执行环境.安装nodejs时,发现安装包使用的是xz后缀,它是使用LZMA无损数据压缩算法生成的文件,压缩率很高.GNU已经内置了 ...
- HDOJ 4857 逃生
BestHack.....真乱..... 逃生 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/ ...
- 单点登录cas常见问题(八) - 什么时候会用到代理proxy模式?
举一个样例:有两个应用App1和App2,它们都是受Casserver保护的,即请求它们时都须要通过Cas server的认证. 如今须要在App1中通过Http请求訪问App2,显然该请求将会被Ap ...
- Corona 不同设备分辨率适应
移动平台下,不同设备的宽高比不同,那么必然存在与游戏设计时的宽高比不一致的情况,Corona的解决方案是定义了一个虚拟的屏幕高宽,比如1024*768,然后在不同设备上通过定义的适应模式去调整这个虚拟 ...
- Spring学习笔记——Spring事务仅仅对执行时异常回滚
我们在使用Spring时候一般都知道事务在遇到异常的时候会回滚.岂不知Spring的事务默认仅仅有在发生执行时异常即:RunTimeException时才会发生事务,假设一个方法抛出Exception ...
- C++中的inline的用法
C++中的inline的用法 参考:http://www.cnblogs.com/fnlingnzb-learner/p/6423917.html 1. 引入inline关键字的原因 在c/c++中 ...
- hdu 4704(费马小定理+快速幂取模)
Sum Time Limit: 2000/ ...