REST ful

Posted zzfx

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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,iosandroid提供服务。另外对于广大平台来说,比如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的主要内容,如果未能解决你的问题,请参考以下文章

rest是啥意思

是否可以从非 REST 部分形式组合 REST 和非 REST 操作和资源?

REST到底是个啥

Rest之路 -- 从第二个Rest application里面分析 Rest 方法

REST学习

REST介绍与REST在PHP中的应用