瞎扯淡 Ruby、函数式和 RESTful

hooopo · 2017年09月28日 · 最后由 jamsine 回复于 2017年10月29日 · 2477 次阅读

最近看了一个叫「What Comes After MVC」的 slide,突然想起了这么一个 SEO 的标题...

What Comes After MVC 讲的大概是通过区分方法的「可变性」和「副作用」,把方法划分成 Value、Entity、Shell、Adapter。并且限制各个组件的调用层次,比如 Value 里不能调用 Adapter,但 Adapter 里可以调用 Value,这样一来每种组件的可变性和副作用都清晰了。

于是自然想到了 RESTful 的设计,我觉得 RESTful 的设计最伟大的地方在于把七个动词赋予了「安全」和「幂等」这两个重要的语意。使得分布式系统里遵循 RESTful 设计之后,通过动词就可以准确判断请求的可缓存性和可重试性。然后,浏览器、正向代理和反向代理才能根据不同的请求动词,对资源进行缓存和重试,并且达到不误伤的效果。

共收到 8 条回复

不明觉厉👍

没太懂 API 幂等的含义,POST 不幂等是因为创建资源是个从无到有的过程?还是因为请求参数中可以不带某些 default value ?不过这篇 slide 确实不错。

darkbaby123 回复

get 每次请求,每次都是一样的,可以随意执行多次。 post 的话,每次都在数据库创建一个新记录,所以不是米等的。 幂等

post 很容易就可以实现幂等的

rocLv 回复

标准规定了 POST 不幂等

有点类似 Phoenix1.2 之前的版本,要求 model 跟 view 尽量没有副作用,副作用的动作都要放到 controller 里

标准也规定了 patch 请求不幂等,所以 Rails 团队才默认用 patch 替换 put

darkbaby123 回复

POST 方法被用于请求源服务器接受请求中的实体作为请求资源的一个新的从属物。 执行 n 次 POST 请求的副作用是创建 n 个资源。执行 1 次 POST 请求的副作用是创建 1 个资源。所以他不是幂等的。

PUT 方法请求服务器去把请求里的实体存储在请求 URI 标识下。 执行 n 次 PUT 请求的副作用是创建 1 个资源。执行 1 次 PUT 请求的副作用也是创建 1 个资源,所以他是幂等的。

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册