互联互通有啥好处?
Posted
技术标签:
【中文标题】互联互通有啥好处?【英文标题】:What's the benefit of Connectedness?互联互通有什么好处? 【发布时间】:2010-09-17 05:48:28 【问题描述】:资源导向架构 (ROA) 定义的连通性有什么好处?按照我的理解,Connectedness 的关键在于能够仅使用根 URI 抓取整个应用程序状态。
但这真的有用吗?
例如,假设 HTTP GET http://example.com/users/joe 返回一个指向 http://examples.com/uses/joe/bookmarks 的链接。
除非您正在编写一个愚蠢的网络爬虫(即使这样我也想知道),您仍然需要在编译时告诉客户端每个链接的含义。也就是说,客户端需要知道“书签 URI”返回书签资源的 URI,然后将控制权交给特殊的书签处理算法。您不能只是盲目地将链接传递给某些通用客户端方法。因为无论如何你都需要这个逻辑:
客户端在运行时确定 URI 与在编译时提供(使 http://example.com/users/bookmarks 成为根 URI)有什么区别?
为什么使用@987654324@
链接而不是id="2"
?
我能想到的唯一好处是能够随着时间的推移更改非根 URI 的路径,但这会破坏缓存的链接,因此无论如何它并不是真正可取的。我错过了什么?
【问题讨论】:
【参考方案1】:您说得对,更改 Uris 是不可取的,但确实会发生,使用完整的 Uris 而不是构造它们会使更改更容易处理。
另一个好处是您的客户端应用程序可以轻松地从多个主机检索资源。如果您允许您的客户端构建 URI,则客户端需要知道某些资源驻留在哪个主机上。当所有资源都位于单个主机上时,这没什么大不了的,但是当您聚合来自多个主机的数据时,它变得更加棘手。
我最后的想法是,也许您将连通性的概念视为静态链接网络,从而过度简化了连通性的概念。当然,客户需要知道资源中可能存在的某些链接,但不一定需要确切知道跟随该链接的后果是什么。
让我举个例子:用户正在为一些商品下订单,他们准备提交他们的购物车。提交链接实际上可能会转到两个不同的地方,具体取决于订单是在本地交付还是在国际交付。也许超过一定价值的订单需要经过额外的步骤。客户端只知道它必须遵循提交链接,但它不知道下一步要去哪里。当然,您可以构建一个通用的“下一步”类型的资源,这样客户端就可以明确地了解这一点,但是通过让服务器动态传递链接,您可以减少客户端-服务器之间的耦合。
我认为资源中的链接是用户可以选择做什么的占位符。谁来完成这项工作以及如何完成工作取决于服务器附加到该链接的 uri。
【讨论】:
【参考方案2】:它更容易扩展,您可以编写小应用程序和脚本来相当容易地与核心应用程序一起工作。
补充:嗯,重点是你没有在编译时指定如何以硬编码的方式将 URI 转换为 uid,而是你可以使用字典或解析来做到这一点,给你更多灵活的系统。
然后说其他人决定更改 URI 语法,该人可以编写一个小脚本来翻译 URI,而无需接触您的核心应用程序。另一个好处是,如果您的 URI 是合乎逻辑的其他用户,即使在公司场景中,也可以轻松编写 Mash-ups 以使用您的系统,而无需触及您的原始应用程序甚至重新编译它。
当然,与整个论点相反的是,在简单的 UID 系统上实现基于 URI 的系统将花费您更长的时间。但是如果你的 App 会被其他人以常规方式使用,那么最初的时间投资将得到很大的回报(可以说具有很好的基于可扩展性的 ROI)。
补充:另外一点在某种程度上是一个口味问题,URI 本身将是一个更好的名称,因为它传达了一个逻辑和定义的含义
【讨论】:
我不确定我理解你的意思。需要详细说明吗? 是什么阻止您使用“逻辑名称”作为自定义 ID 并将它们映射到底层的真实数据库 ID?例如,id="2" 将改为 id="john"。我了解逻辑 ID 的好处,但这似乎无法回答我的问题。 不幸的是,我想我已经回答了“为什么”,问题是“为什么”不是你想做的。所以你不想使用 URI,这很好。这些论点并不比面向对象编程与过程编程更有效。它只是一种思维定势和编程哲学,仅此而已 我真诚地试图理解为什么 URI 是有益的。我有这样的感觉,并且我正在尝试尽可能多地接受 ROA,但我认为理解为什么它的最佳实践是有益的而不是盲目地应用它们是至关重要的。 您为资源 URI 为什么应该使用逻辑 ID(而不是数据库 ID)提出了一个很好的论据。但是使用逻辑 ID公开 资源 URI 与从另一个资源表示引用这样的 URI 不同。我明白为什么前者是有益的,但为什么是后者?【参考方案3】:我会添加我自己的答案:
-
遵循服务器提供的 URI 比自己构建它们要容易得多。当资源关系变得过于复杂而无法用简单的规则表达时,尤其如此。在服务器中编写一次逻辑比在众多客户端中重新实现更容易。
即使单个资源 URI 保持不变,资源之间的关系也可能会发生变化。例如,假设谷歌地图从 0 到 100 索引他们的地图图块,从屏幕的左上角到右下角计数。如果 Google 地图要更改其图块的比例,计算相对图块索引的客户端将会崩溃。
自定义 ID 标识资源。 URI 通过识别如何检索资源表示更进一步。这简化了只读客户端(例如网络爬虫)或下载不透明资源(例如视频或音频文件)的客户端的逻辑。
【讨论】:
以上是关于互联互通有啥好处?的主要内容,如果未能解决你的问题,请参考以下文章