Restful Web service读书笔记

面向资源的架构roa

Resource- oriented architecture

四个属性

可寻址性addressability

在URI里面有query或者本身(像本博客的文章链接)

无状态性 statelessness

无法返回,可能违反了无状态性

连通性 connectedness

可以让应用进入其他状态,甚至进入其他应用的其他状态

统一接口 uniform interface

Get, post, put, delete, head, options

head

Head比get就是缺少返回的实体主体.
可以检查资源是否存在而不必下载实体主体

options

看可以对一个资源作哪些操作

post

在rest式设计中post通常被用于创建 从属资源(subordinate resources),即从属于父资源而存在的资源,例如本博客程序作为一个资源,而文章就是从属资源。
因此我可以向父资源(博客)发送post请求,这种用法被称为post(a) 表示append 添加。

重载的post(p) p:process

在post里面放一堆东西,可能并不是真的在post而是在处理其他的事情,比如delete

安全性和幂等性(idempotence)

安全性

如果能按照原来的用意暴露统一接口,那么用户在使用get,不用害怕修改掉服务器的资源。
(有时的副作用)有的时候客户端使用get请求,服务器会计数+1(记访客数,或者记录日志)等影响不会很大。且客户端不知道会产生此副作用

幂等性(idempotence)

一个操作无论执行多少次,结果总是一样的。
例如任何数乘以0都等于0。
一个资源put以后还是一个资源。
一个资源delete后它就不存在了,无论删除多少次,它都不存在。
幂等性对实践提出的要求是:客户端可以通过put把数值设置为4,0,6。但是不允许直接对资源+1,例如0两次put后就成了2。该操作不满足幂等性。

为什么

如果在一个非可靠网络上,收到了两次put,即使前一个已经被处理了,再处理一次也不会有任何副作用。
post不是安全的,也不是幂等的。可以参考贴吧回复的时候可能会抽风,回复了两次。
误用:请不要通过get暴露非安全操作。
Google在2005年发布了一个Web accelerator,可以 prefetch 页面的链接。。。然后可想而知,如果有一个delete操作使用的是get,用户在打开自己的页面时,不知情的状况下就会删除自己的数据。


已发布

分类

来自

标签:

评论

《“Restful Web service读书笔记”》 有 1 条评论

  1. 匿名用户 的头像
    匿名用户

    Roa好像是作者和一小部分人造出来的概念,需要留意。
    Roa规定要基于HTTP方法。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注