ruby-on-rails – RESTful网站与RESTful API – 有什么区别,它有
我一直在阅读很多关于REST和REST的“正确的方式”.大多数资源使用诸如RESTful Web服务或RESTful API之类的术语,但不提及RESTful网站.我感到困惑,因为我认为一个网站和API是两个不同的东西.然而,例如,当使用Rails框架设计网站时,您会不断提醒有关RESTful的一切(或应该是)的RESTful.
我知道REST为API提供了很多优势(其架构属性)(例如JSON API),但是我不知道网站是如何受益于RESTful的.作为一个简单的例子考虑登录功能.在REST方式下,可以通过创建一个具有登录对话的Session模型来建模,创建一个新的sesssion,注销摧毁一个会话等等.网址如下所示: Prefix Verb URI Pattern Controller#Action new_user_session GET /users/login(.:format) sessions#new user_session POST /users/login(.:format) sessions#create destroy_user_session DELETE /users/sign_out(.:format) sessions#destroy 但是,这些URL不是很友好.从用户的角度来看,只需在登录表单中显示/登录路径就更有意义了.这也更容易记住.但是,如果我们使URL地图如此,那么它们不再是RESTful了;做/登录识别一个资源.如果是这样的话? 另一个例子是主页/ home或只是/.如何适应REST?在大多数网站上,主页是许多不同类型信息的混搭,并不识别任何单一资源.例如,它可以是列出目录中最新产品和您登录的最后一个日期的页面;两个完全无关的事情.那么RESTful呢 我明白为什么将RESTful API与网站分开是有道理的,但我的困惑在于REST如何应用于网站 – 如果它甚至. 解决方法
简单的答案是没有人谈论RESTful网站,因为默认情况下网站是RESTful的.你真的要尝试做一个非RESTful的网站(虽然已经完成了 – 请看下面).
您所描述的设置需要REST的许多元素,但它本身并不是“REST”,它是为了方便服务器端程序员而设计的一组约定.今天的大多数Web API只使用REST约束的一部分,它是一个不包含网站主要驱动原则的子集. 让我备份一下以下是网站和网络API的共同点:它们都通过资源公开功能.每个资源由URL标识,每个资源都会响应标准HTTP方法的适当子集. (这可能看起来很明显,但看看XML-RPC或SOAP,其中整个系统只有一个URL.)资源可能会向客户端发送文档(响应GET请求)和/或可能接受文档客户端(以及POST或PUT请求). 现在,差异. Web API经常将四种最常见的HTTP方法(POST,GET,PUT,DELETE)映射到四个CRUD操作(创建,读取,更新和删除)中.网站不能这样做,因为网站运行在HTML上,HTML表单只支持两种方法:GET和POST.然而,一个网站可以轻松地描述各种行为 – “搜索”,“下一页”,“购买”,“不友好” – 这些操作非常重要,可以映射到CRUD. 这是因为HTML支持链接和表单.这是家庭树的“Web API”分支中缺少的内容.不是资源,而是资源之间的机器可读连接. (要删除一些REST术语,这是“超媒体约束”或“超媒体作为应用程序状态的引擎”). “Web API”倾向于忽略超媒体限制,因为a)很难理解,b)JSON不支持链接或表单,因此即使您愿意,也难以遵守超媒体约束. (随着格式如JSON-LD,Hydra和HAL的发展而改变.) 但是,超媒体约束在字面上是什么把Web连在一起.拿走链接和表格,你会留下一个不可用的混乱. Python Challenge是非RESTful网站的一个很好的例子.你得到a starting URL,然后你必须解决一个小小的难题,弄清楚如何到达下一个URL的顺序.您仍然拥有资源,每个资源都有一个URL.但是资源之间的联系是模糊的.这是一个有趣的游戏,但没有人会以这种方式运行一个严肃的网站.不幸的是,这是我们在“Web API”方面的一个方面. 进一步阅读 你可以说,这是一个复杂的话题.有可能冒犯自己的角,the “maturity model”我开发了一个2008年的谈话可能会帮助您了解万维网(3级)和今天的大多数API(2级)之间的架构差异.我还建议Steve Klabnik的Designing Hypermedia APIs和我自己的RESTful Web APIs,它将Web API与完全一样的网站进行比较. 我早期的书RESTful Web Services也涵盖了这个主题,可以在线阅读.然而,它有点过时了(2007年发表),回想起来,我不认为它足够强大的超媒体角度. 杂 简单地回答一下你原来的问题的一些细微点: > Web API和网站之间没有技术上的区别.一个网站是一个Web API,正好提供HTML文档. 在对URL进行请求时运行的代码,而不是尝试将其映射到数据集中的一个特定“事物”,可能会更好地考虑资源.也就是说,不是想弄清楚资源是什么,而是根据它的作用来考虑它. 希望这可以帮助. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- Oracle tnsnames.ora listener.ora 配置
- ApplicationContext.xml文件配置的两种方式
- Cocos2d-x3.2 Sprite精灵类的创建与设置
- Generate XML from object
- ruby-on-rails – 我怎样才能在S3上压缩/ tar文件而不先将它
- ruby-on-rails – (rails)使用regexp验证URL帮助
- cocos2dx学习笔记2
- ruby-on-rails – activerecord has_many:通过一次sql调用
- Oracle ORA-12541:TNS:no listener错误解决方法
- Mini2440裸板编程——Nand Flash