理解POST和PUT的区别,顺便提下RESTful
理解POST和PUT的区别,顺便提下RESTful
首先解释幂等,幂等是数学的一个用语,对于单个输入或者无输入的运算方法,如果每次都是同样的结果,则称其是幂等的
对于两个引数,如果传入值相等,结果也等于每个传入值,则称其为幂等的,如min(a,b)
POST
用于提交请求,可以更新或者建立资源,是非幂等的
举个例子,在我们的支付系统中,一个api的功能是建立收款金额二维码,它和金额相关,每个使用者可以有多个二维码,如果连续呼叫则会建立新的二维码,这个时候就用POST
PUT
用于向指定的URI传送更新资源,是幂等的
还是那个例子,使用者的账户二维码只和使用者关联,而且是一一对应的关系,此时这个api就可以用PUT,因为每次呼叫它,都将重新整理使用者账户二维码
比如一个介面用于使用者生成,接收的资料是使用者名称、密码等相关资讯,则用POST
RESTful建议所有的URI都是对应资源,所以建立使用者不应该理解为一个行为,在此将此介面命名为:
/user/creation
每次呼叫它都会新建一个使用者(假定使用者名称可以重复)
而PUT方法更加关心一个具体资源对应的URI,比如更新当前使用者资讯,这里可以用PUT
/user/me/update
这里用me来指代当前使用者,如果是针对更多使用者适用的介面,可以考虑
/user/{uid}/update
注意多次呼叫同一介面,只要提交的资料一致,使用者资讯每次结果就会一致,即产生同样的结果:伺服器端某个具体的资源得到了更新
当需要以更新的形式来修改某一具体资源的时候,如何判断用PUT还是POST呢?
很简单,如果该更新对应的URI多次呼叫的结果一致,则PUT
比如更新某个blog文章,因为该文章具有单一的具体URI,所以每次更新提交相同的内容,结果都一致
/blog/{document_id}/update
在每次更新提交相同的内容,最终的结果不一致的时候,用POST
举个很常见的例子,一个介面的功能是将当前余额减一个值,每次提交指定该值为100,介面如下
/amount/deduction
呼叫一次,你的余额-100,呼叫两次,余额-200
这个时候就用POST
RESTful的4种层次
Representational status transfer
个人理解为:表现形式的状态传递
1、只有一个介面交换xml来实现整个服务
目前我们的移动站点的服务就是类似的结构,我们有两个URI介面/mapp/lead和/msdk/safepay
2、每一个资源对应一个具体的URI,比1好维护,但是问题依然很明显,资源版本更新会引入时间戳维护,资源的获取和更新修改必须对应不同的URI
目前PC主站和移动站点的静态内容(包括档案)都是这种形式
3、在2的基础上使用了 verb,每个URI可以有不同的动作,充分利用了协议,所以自然居然协议的完整优势,比如快取和健壮性
HTML4.0只支援POST和GET,所以无论DELETE还是PUT操作,都用POST去模拟了
在WEB开发者看来,就是如果有资料变动,就用POST,如果没有,就用GET
所以目前中国使用者来看,PC端实现RESTful很困难,只有移动端支援Html5的浏览器,才能让前端做出尝试
4、现在似乎更加无法实际应用,Hypemedia control,也就是RESTful的本意,合理的架构原理和以网路为基础的设计相结合,带来一个更加方便、功能强大的通讯架构
在HTTP中,PUT被定义为idempotent的方法,POST则不是,这是一个很重要的区别。
“Methods can also have the property of "idempotence" in that (aside from error or expiration issues) the side-effects of N > 0 identical requests is the same as for a single request.”
上面的话就是说,如果一个方法重复执行多次,产生的效果是一样的,那就是idempotent的。
REST 定义了一组体系架构原则,您可以根据这些,包括使用不同语言编写的客户端如何通过 HTTP 处理和传输资源状态。所以在事实上,REST 对 Web的影响非常大,由于其使用相当方便,已经普遍地取代了基于 SOAP 和 WSDL 的介面设计。在多年以后的今天,REST的主要框架已经开始雨后春笋般的出现。
post[英] [pəust] [美] [post] n. 邮件;邮政;柱,桩,杆;岗位;
vt. 张贴;宣布;设岗;邮寄;
vi. 快速行进;
adj. 有关赛跑(或赛马,赛狗)起点标志的;
adv. 〈外〉在后;用急件[驿马];赶紧地,火速地;
put[英] [put] [美] [pʊt] vt. 放;表达;给予(重视、信任、价值等);使处于(某种状态);
vt.& vi. 使感觉到;使受到…的影响;
vi. 说;猛推;将…送往;使与…连线;
n. [方]笨蛋,怪人;对策;
adj. 固定的;不动的;
restful[英] [ˈrestfəl] [美] [ˈrɛstfəl] adj. 平静的,悠闲的,让人得到休息的;安生;
post 和 put 的区别
POST请求的URI表示处理该封闭实体的资源,该资源可能是个资料接收过程、某种协议的闸道器、或者接收注解的独立实体。然而,PUT请求中的URI表示请求中封闭的实体-使用者代理知道URI的目标,并且伺服器无法将请求应用到其他资源。如果伺服器希望该请求应用到另一个URI,就必须传送一个301响应;使用者代理可通过自己的判断来决定是否转发该请求。
HTTP/1.1没有定义一个PUT请求如何影响原始伺服器的状态。
PUT请求必须遵守资讯传输要求。
除非另有说明,PUT请求中的实体头部应该用于PUT建立或修改的资源上。
restful和soap的区别
rest轻量级,SOAP重量级;rest学习起来比较简单,容易上手,SOAP相对来说难些;rest能通过形式的直接呼叫,基于JSON,SOAP通过XML传输;rest效率和速度来说相对快些,SOAP则稍逊一筹
webservice和restful的区别
REST是一种架构风格,其核心是面向资源,REST专门针对网路应用设计和开发方式,以降低开发的复杂性,提高系统的可伸缩性。REST提出设计概念和准则为:
1.网路上的所有事物都可以被抽象为资源(resource)
2.每一个资源都有唯一的资源标识(resource identifier),对资源的操作不会改变这些标识
3.所有的操作都是无状态的
REST简化开发,其架构遵循CRUD原则,该原则告诉我们对于资源(包括网路资源)只需要四种行为:建立,获取,更新和删除就可以完成相关的操作和处理。您可以通过统一资源识别符号(Universal Resource Identifier,URI)来识别和定位资源,并且针对这些资源而执行的操作是通过 HTTP 规范定义的。其核心操作只有GET,PUT,POST,DELETE。
由于REST强制所有的操作都必须是stateless的,这就没有上下文的约束,如果做分散式,丛集都不需要考虑上下文和会话保持的问题。极大的提高系统的可伸缩性。
对于SOAP Webservice和Restful Webservice的选择问题,首先需要理解就是SOAP偏向于面向活动,有严格的规范和标准,包括安全,事务等各个方面的内容,同时SOAP强调操作方法和操作物件的分离,有WSDL档案规范和XSD档案分别对其定义。而REST强调面向资源,只要我们要操作的物件可以抽象为资源即可以使用REST架构风格。
REST ful 应用问题
是否使用REST就需要考虑资源本身的抽象和识别是否困难,如果本身就是简单的类似增删改查的业务操作,那么抽象资源就比较容易,而对于复杂的业务活动抽象资源并不是一个简单的事情。比如校验使用者等级,转账,事务处理等,这些往往并不容易简单的抽象为资源。
其次如果有严格的规范和标准定义要求,而且前期规范标准需要指导多个业务系统整合和开发的时候,SOAP风格由于有清晰的规范标准定义是明显有优势的。我们可以在开始和实现之前就严格定义相关的介面方法和介面传输资料。
简单资料操作,无事务处理,开发和呼叫简单这些是使用REST架构风格的优势。而对于较为复杂的面向活动的服务,如果我们还是使用REST,很多时候都是仍然是传统的面向活动的思想通过转换工具再转换得到REST服务,这种使用方式是没有意义的。
效率和易用性
SOAP协议对于讯息体和讯息头都有定义,同时讯息头的可扩充套件性为各种网际网路的标准提供了扩充套件的基础,WS-*系列就是较为成功的规范。但是也由于SOAP由于各种需求不断扩充其本身协议的内容,导致在SOAP处理方面的效能有所下降。同时在易用性方面以及学习成本上也有所增加。
REST被人们的重视,其实很大一方面也是因为其高效以及简洁易用的特性。这种高效一方面源于其面向资源介面设计以及操作抽象简化了开发者的不良设计,同时也最大限度的利用了Http最初的应用协议设计理念。同时,在我看来REST还有一个很吸引开发者的就是能够很好的融合当前Web2.0的很多前端技术来提高开发效率。例如很多大型网站开放的REST风格的API都会有多种返回形式,除了传统的xml作为资料承载,还有(JSON,RSS,ATOM)等形式,这对很多网站前端开发人员来说就能够很好的mashup各种资源资讯
安全性
技术没有好坏,只有是不是合适,一种好的技术和思想被误用了,那么就会得到反效果。REST和SOAP各自都有自己的优点,同时如果在一些场景下如果去改造REST,其实就会走向SOAP(例如安全)。
REST对于资源型服务介面来说很合适,同时特别适合对于效率要求很高,但是对于安全要求不高的场景。而SOAP的成熟性可以给需要提供给多开发语言的,对于安全性要求较高的介面设计带来便利。所以我觉得纯粹说什么设计模式将会占据主导地位没有什么意义,关键还是看应用场景。
同时很重要一点就是不要扭曲了REST现在很多网站都跟风去开发REST风格的介面,其实都是在学其形,不知其心,最后弄得不伦不类,效能上不去,安全又保证不了。
成熟度
SOAP虽然发展到现在已经脱离了初衷,但是对于异构环境服务释出和呼叫,以及厂商的支援都已经达到了较为成熟的情况。不同平台,开发语言之间通过SOAP来互动的web service都能够较好的互通。
由于没有类似于SOAP的权威性协议作为规范,REST实现的各种协议仅仅只能算是私有协议,当然需要遵循REST的思想,但是这样细节方面有太多没有约束的地方。REST日后的发展所走向规范也会直接影响到这部分的设计是否能够有很好的生命力。
restful和的区别
REST 定义了一组体系架构原则,您可以根据这些,包括使用不同语言编写的客户端如何通过 HTTP 处理和传输资源状态。所以在事实上,REST 对 Web的影响非常大,由于其使用相当方便,已经普遍地取代了基于 SOAP 和 WSDL 的介面设计。在多年以后的今天,REST的主要框架已经开始雨后春笋般的出现。
个人理解:
(一) 首先REST只是一种风格,不是一种标准
(二) REST是以资源为中心的
(三) REST充分利用或者说极端依赖HTTP协议
一.对于今天正在吸引如此多注意力的最纯粹形式的 REST Web 服务,其具体实现应该遵循以下基本设计原则:
1.1.显式地使用不同的 HTTP 请求方法
1.2.无状态
1.3.公开目录结构式的 URI(通过逻辑URI定位资源)。
1.1.显式地使用不同的 HTTP 请求方法
我们在 Web 应用中处理来自客户端的请求时,通常只考虑 GET 和 POST 这两种 HTTP 请求方法。实际上,HTTP 还有 HEAD、PUT、DELETE 等请求方法。而在 REST 架构中,用不同的 HTTP 请求方法来处理对资源的 CRUD(建立、读取、更新和删除)操作:
若要在伺服器上建立资源,应该使用 POST 方法。
若要检索某个资源,应该使用 GET 方法。
若要更改资源状态或对其进行更新,应该使用 PUT 方法。
若要删除某个资源,应该使用 DELETE 方法。
PHP中put和post区别
1. 使用支援和范围的区别:
PHP提供了对PUT方法的支援,在Http定义的与伺服器的互动方法中,PUT是把讯息本体中的讯息传送到一个URL,形式上跟POST类似;
PHP 提供对诸如 Netscape Composer 和 W3C Amaya 等客户端使用的 HTTP PUT 方法的支援;
PHP 4 中,必须使用标准的输入流来读取一个 HTTP PUT 的内容;
PUT方法没有POST方法使用广泛,但PUT方法却是向伺服器上传档案最有效率的方法:
2.上传过程的区别:
POST上传档案时,通常需要将所有的资讯组合成multipart 传送过去,然后伺服器再解码这些资讯,解码过程则必不可少的会消耗记忆体和CPU资源,这种现象在上传大档案时尤其明显;
PUT方法则允许你通过与伺服器建立的socket连结传递档案的内容,而不附带其他的资讯,效果上更直接;
3.上传效果的区别:
PHP 接受到 PUT 方法的请求时,会把上传的档案储存到和其它用 POST 方法处理过的档案相同的临时目录;请求结束时,临时档案将被删除。
用来处理 PUT 的 PHP 指令码必须将该档案拷贝到其它的地方;
4. POST和PUT请求根本区别
POST请求的URI表示处理该封闭实体的资源,该资源可能是个资料接收过程、某种协议的闸道器、或者接收注解的独立实体;
PUT请求中的URI表示请求中封闭的实体-使用者代理知道URI的目标;
伺服器无法将请求应用到其他资源;
如果伺服器希望该请求应用到另一个URI,就必须传送一个301响应;
使用者代理可通过自己的判断来决定是否转发该请求;
get和post的区别,你真的理解吗
get是收到得到 post 发出一进一出就是根本区别
He is ( ) a coat Ain B putting on C wearing 选什么? 顺便讲下in put on wear的区别
选C。
in强调穿着什么样的衣服(这里一般 用in引导的介词短语 作定语。);
例:The girl in a blue blouse is my sister.
in a blue blouse是介词短语,在句中作为定语来修饰the girl。
put on强调穿上衣服的动作,一般用现在进行时;
例:The girl is putting on a blue blouse.
put on是行为动词的固定搭配。
wear强调穿着某衣服的状态。
例:The girl wears a blue blouse.
wear意为“穿着”。