问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何实现真正的REST风格?

发布网友 发布时间:2022-05-02 06:51

我来回答

1个回答

热心网友 时间:2022-04-27 10:00

SocialSite的REST API最近因Roy Fielding称其不符合REST风格而受到批评。Roy说,它是众多自称符合REST风格而实则不然的系统之一。 OpenSocial的REST API是RPC式的,而且是公然宣誓其RPC本性。它在如此多的方面存在耦合,所以理应将它评为“差”。 从OpenSocial网页上提供的信息来看,你不难同意Roy的观点。例如:在服务端为OpenSocial风格的REST和JSON-RPC提供支持在客户端为JSON-RPC批量请求提供支持服从OpenSocial对扩展的需求另外,我们都知道REST跟RPC是紧密相关的。 鉴于已经见过很多自称符合REST风格而实则不然的网站,Roy接着就如何构建真正符合REST风格的网站(及API)给予了指导。现部分摘录如下:REST API不应依赖于某一个通信协议。如果一个协议元素(protocol element)要将URI用于标识的目的,那么它必须允许采用任意URI方案(scheme)。[做不到这一点,就意味着标识与交互没有分离。]媒体类型(media types)是用于表示资源和推进应用状态(application state)的,REST API应将绝大部分描述精力用于定义媒体类型,或者是为现有的标准媒体类型定义扩展的关系名称(relation names)和/或基于超文本的标记(markup)。如果要就“对所谈及的URIs采用什么方法”进行定义的话,那么应完全把它放在媒体类型的处理规则 范围内进行定义(不过在大多数情况下,现有媒体类型都已经定义好了)。[做不到这一点,就意味着交互不是由超文本、而是由外部信息(out-of-band information)推进的。]REST API一定不能定义固定的资源名称或层次。服务器必须可以自由控制它自己的名称空间(namespace)。应该像HTML表单(HTML forms)和URI模版(URI templates)那样,通过媒体类型和链接关系(link relations)给出指示,使得服务器可以指导客户端如何构造正确的URIs。[做不到这一点,就意味着客户端在根据外部信息(比如跟领域相关的标准)假定资源结构——相当于面向数据方法里的RPC功能耦合。]要使用REST API,应该只需知道初始URI(书签)和一套适合于目标用户(即可被任何使用该API的客户端所理解)的标准媒体类型。这样的话,所有的应用状态迁移, 都必须以“客户端在服务器提供的选项里挑选”这样的方式进行;服务器提供的选项,或者直接出现在用户收到的表示(representations)里,或 者在用户对那些表示进行处理后得到。客户端可以根据自己所掌握的关于媒体类型与资源通信机制的知识来决定(或*)状态转移,客户端可以即时增加对媒体类 型与资源通信机制的支持(比如通过代码请求)。[做不到这一点,就意味着交互不是由超文本、而是由外部信息推进的。]Roy的这篇文章收到了很多反馈,有的是直接回复评论,有的是另发文章,其中有人提出了一些关于超文本/超媒体使用的问题,对此Roy回答道: 我所说的超文本(hypertext)指的是信息与控件的同时呈现,这样一来,信息便具有自解释性 (affordance)了,从而用户(或程序)可以通过它获取选项、并作出选择。超媒体(hypermedia)只是对文本的含义加以延伸、在媒体流里增 加了时间锚(temporal anchors);大部分研究者已经不对它们加以区分了。超文本不一定就是浏览器里的HTML。机器只要理解数据格式和关系类型,它就可以跟随链接。 当被问及为什么他觉得很多人未能正确实现REST风格时,Roy说:某种程度上,人们未能正确实现REST风格,是因为我在博士论文里没有就媒体类型设计(media type design)作充分详细的论述。那并不是因为我觉得媒体 类型设计不如REST的其他方面重要,而是因为我当时时间不够。还有,我想很多人做得不对,可能是因为他们仅仅阅读了根据非权威资料撰写而成的 Wikipedia相关条目。不过,我觉得很多人存在一个错误的认识,他们认为:设计简单的东西,应该是轻而易举的。而在现实中,设计某样东西需要花费的 精力,与结果的简单 程度是成反比的。与其他架构风格相比,REST是相当简单的。REST是用于长远考虑的软件设计:它的每一个细节都是为了提升软件寿命和独立演化。有许多 约 束是直接与短期功效对立的。不幸的是,人们较擅长于短期设计,而对待长期设计就很糟糕了。大部分人认为他们不需要为以后的版本作考虑。有不少软件方法都把 长远 考虑说成是执迷不悟的、象牙塔的设计(若不是有实际需求的话,那么可能是的)。 实际上,如果你对REST感兴趣的话,对该文的所有回复都值得一读。Dare Obasanjo在一篇单独的文章中进行了概括总结:最要铭记的是,REST所构建的,是在万维网(World Wide Web)上使用、对Web生态系统有利的软件。理想情况下,一个REST风格的API既可为众多网站所用、又可被运行在各种平台上的应用所用,而且客户 端应用与Web服务之间是零耦合的。RSS/Atom提要(feed)就是一个很好的例子,它也是世界上最成功的REST式API。 他专门考察了Roy提到了一种错误做法:实现API的服务需具有一种特定的URI结构。 这种做法的问题是,它假定每一个实现者都对他们的URI空间拥有完全控制权,而且客户端应该把URL结构写进代码里去。Joe Gregorio在文章《No Fishing - or - Why 'robots.txt and 'favicon.ico' are bad ideas and shouldn't be emulated》里很好地解释了这一做法不好的原因,他在文章中列出了写死URL不好的几点理由,比如:缺乏扩展性;不支持那些采用寄存环境、从而无法控制URI空间的用户。 网上有大量其他REST资源(双关)。它们大部分由权威人士编写,并记录下了有关实现。不过显而易见的是,并不是所有使用Web的应用都是REST式应用,也并不是所有自称符合REST风格的应用都符合。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
养胃的药最好的是什么啊 婴儿积食发烧不愿吃药怎么办 板门穴位在哪个部位 手机设置放偷看的方法? 凝结水回收器生产厂家? 个人账户养老金预测公式:现有5万元,缴费20年,能领多少钱? 临沂比较有名的男装品牌 呼伦贝尔市悦动网络科技有限公司怎么样? 呼伦贝尔中汇实业有限公司怎么样? 呼伦贝尔油玉不绝电子商务有限公司怎么样? 在oracle中怎么操作两个date类型数据的计算,例如time表中有两个字段,starttime,endtime,数值分别是 脚鸡眼是什么样子啊,了解的请说说 请问鸡眼长成什么样子? 鸡眼 跖疣长什么样子 鸡眼是什么样子的。 鸡眼是什么样子的啊?有什么方法治疗啊? itouch5被我弟弟试错密码N次,最后它显示“ipod已停用,连接itunes” ITOUCH5能用IPAD2的充电器么?? itouch5和itouch6外观上有什么区别 怎么删除支付宝里绑定的医疗保险名字 九宫八卦牌可以化解室内壁刀煞吗?看台湾的风水节目,说九宫八卦牌可以化解室外壁刀煞。那请问室内的呢 九宫八卦镜究竟应该挂在哪里 - 信息提示 九宫八卦图挂在佛像背后可以吗? 平面设计台式电脑配置,或者推荐个品牌,预算5000到6000,求懂行的大神帮忙,谢谢! 九宫八卦牌应该戴在哪里? 10台苹果手表无包装坐飞机从国外带回需要报关吗? 求公司平面设计师用的电脑配置? 给我女儿起名 五行缺木 摩托罗拉V3 现在的售价是多少 各地的 房屋抵押贷款银行放款时提供的销售合同是假的违法吗 朋友房子抵押贷款,但是需要我的营业执照签字(采购合同),银行把钱打到我这里,会对我产生什么影响? 开50万劳务费发票需要扣多少个税? 年薪50万交多少税 无锡滨湖区教师编制,小学语文一般考哪些内容?有这几年刚考过的吗 房产证抵押贷款给银行,可以签买卖合同吗 我开了一家劳务公司------现收到劳务费50万的劳务费是用劳务*拿的钱,应该交那些税。 我考进了教师编制,现在纠结于是选无锡市蠡湖中心小学还是育红小学。帮我选择一下吧,真心太纠结了。 什么是社保基金左侧交易? 请问无锡市滨湖区教师编制,小学科学老师专业知识考些什么? 无锡滨湖区教师编制考试 报考小学英语教师 专业知识是指什么 无锡滨湖区的教师编制考试主要考什么?主要看哪些参考书籍? 蚂蚁财富基金收益率显示左侧指数代表什么? 请问有参加过无锡滨湖区中小学教师招聘的吗?一般报名后多久进行笔试?笔试要考专业知识吗? 无锡滨湖区新教师工资大概多少啊?小学的 磷酸铁锂电池铝壳是正极还是负极 狗猫鼠梗概 作业管理课后服务工作进展取得的成效 课后服务的收获和感受有哪些? 您好!我今年要参加无锡的教师编制考试,我想问一下滨湖区的该看些什么书啊,其他区的也行