外科学考试重点:没有人真正理解REST or HTTP
来源:百度文库 编辑:偶看新闻 时间:2024/04/29 15:47:17
3 顶一下 Literate Programming - Nobody Understands REST or HTTP
banq
个人详介按这里
发表文章: 12107
注册时间: 2002年08月03日
顶一下2011年07月04日 09:41 "@banq"的言论将来是否有一种技术思想,将DDD REST以及面向函数三者完美捆绑一起,通过URL代表领域模型类图的结构关系 ...
Literate Programming - Nobody Understands REST or HTTP
这篇文章很有意思,挖掘了REST深层,特别重点指出REST的URL是名词。
比如银行转帐,从帐户1转到帐户2转去500元,那么REST URL一般人写成:
POST /accounts/1/transfer/500.00/to/2
其实错误的,因为REST中R代表Resource资源,资源是名词,你并不是在转钱,而是在创建一个转帐交易资源。应该是:
POST 资源名词
这个概念很有意思,我们知道DDD也是一个名词建模,在DDD中,转帐交易我们是使用一个服务来实现,当然这里的服务可以看成是一个资源。
曾经有一篇文章认为WEB天生是面向函数的,这里的“POST”可以看成是一个方法函数,而“资源名词”看成方法的参数。
将来是否有一种技术思想,将DDD REST以及面向函数三者完美捆绑一起,通过URL代表领域模型类图的结构关系,比如/forum/thread,代表Forum类的子类Thread,领域模型被显式地用URL表达出来,用户访问形式和我们分析设计的模型合二为一,大道至简。
遐想太多,回到这篇文章,作者认为这个转帐应该是创建一个转帐交易资源,改为:
POST /transactions
然后加入参数 from=1&to=2&amount=500.00
在面向函数FP中,函数也可以看成是一个对象,对象也就是资源,在REST这里好像得到了统一。
接着作者思路,当创建了交易资源后,服务器REST端将返回:
HTTP/1.1 201 OK
Date: Sun, 3 Jul 2011 23:59:59 GMT
Content-Type: application/json
Content-Length: 12345
Location: http://foo.com/transactions/1
{"transaction":{"id":1,"uri":"/transactions/1"}}
返回的URL是http://foo.com/transactions/1,也就是告诉你已经成功创建了transactions这个交易,下一步你可以访问其中的/transactions/1
当REST客户端再次访问:
GET /transactions/1 HTTP/1.1
返回结果是:
HTTP/1.1 blah blah blah
{"id":1,"status":"in-progress"}
表示正在处理当中,我们可以继续访问这个URL,直至其完成或失败。这就是名词思路。
有人可能认为这个名词思路和WEB的天生函数FP有违背,实际上,REST的POST/GET等四个动作已经表明是函数,那么URL无疑代表业务名词,当然,是不是可以将URL又代表业务方法或函数呢?其实,这里transactions交易被当作资源,而交易显然是业务方法或函数。
banq HTTP/1.1 201 OK
Date: Sun, 3 Jul 2011 23:59:59 GMT
Content-Type: application/json
Content-Length: 12345
Location: http://foo.com/transactions/1
{"transaction":{"id":1,"uri":"/transactions/1"}}
个人详介按这里
发表文章: 12107
注册时间: 2002年08月03日
- 我在线上
- 137人关注
- 悄悄话
- 个人博客
顶一下
2011年07月04日 09:41 "@banq"的言论将来是否有一种技术思想,将DDD REST以及面向函数三者完美捆绑一起,通过URL代表领域模型类图的结构关系 ...
我的这个想法在今天的InfoQ中一篇文章中有体现,
InfoQ: unREST as the new REST?
该文的意思,现在REST可能已经偏离原来的REST定义,正在演进为更高层更深层的含义(所以,体现为非REST unREST,或者是更新的REST,否定之否定),如下三点:
1.成为特定领域的统一定义接口,"不要害羞,忘记Http四个小动词, 你甚至可以定义你自己的动词如: Query/Do/Notify/Synchronize 就是一个好的例子,它的意思是:在你的Web API中所有方法将是 query, action, notification or sync 四种请求类型."(这个符合我在上贴提到思想)
2.特定的消息: 端到端彼此通信用的会话媒介, 每个消息定义很显然对应于一个好的API定义,消息的可拓展新使得分布式计算成为可能。
3.端到端的特定合约,确保他们通过了版本校验,从机器可读性到人可读性的合约。
POST和PUT的区别
[该贴被banq于2011-10-27 13:14修改过]
为什么没有人能真正理解我?
为什么没有人理解我?
有人能真正的理解抑郁症病人吗?
似乎没有人能理解我
有没有人真正了解安利的?
怎样深入理解HTTP协议?
谁能真正理解爱情?
You can go to one the finest b_______ to swim or to have a rest.根据首字填空
有人理解吗?
我想珍惜友谊,真的想珍惜,可是我真的好苦,没有人理解!
没有人会理解我 复杂的民族 家庭 爱情矛盾
有没有人能理解活着是为了什么?到底为了什么?
有没有人曾经在这个http://www.buy91.com/购物,信誉好不好?
请问有没有人知道最新最快的HTTP代理或者SOCKT代理?
有没有人能找到龟摔下舞台的视频 在线或者MO、HTTP下载呢?!
有没有人相信网恋?在网上会不会有真正的爱情?
有没有人真正经历过灵魂和自己的身体分离???
有没有人真正经历过灵魂和自己的身体分离???
有没有人可以告诉我,什么是真正的爱情?爱要怎样才完美?
直销,不知道有没有人真正了解的呢?是不是都是骗人的呢?
是不是没有人是真正可以相信的? 为什么谈恋爱会这么麻烦呢?
有没有人用过锅王胡师傅的,讲讲真正的效果如何?
世界上有没有人真正把脸瘦下来了?请传授亲身经验~~~
世界上有没有人真正把脸瘦下来了?请传授亲身经验