替代YQL的选择

10

这是一个多方面的问题。我刚刚观看了一位领导开发人员(来自我的硕士课程)有关YQL的非常有趣的演示。虽然它非常吸引人,我期待尝试它,但我想知道是否有其他框架可以查询多个Web服务API以使它们表现得无缝,这是YQL的明显目的?

雅虎的策略是创建XML模式定义,将给定Web服务的参数绑定到他们的YQL Open Table查询参数中,这在我看来非常聪明。是否有任何工具尝试(也许我太天真了)自动发现REST API中的参数?我知道对于SOAP API,因为有发布的WSDL,所以自动化更容易,但对于REST,还没有办法做到这一点吗?有人在尝试吗?


我非常怀疑是否存在一种自动发现REST API的工具,因为同一实体可能有许多不同的表示形式,并且可能会自定义接受哪些参数。WADL试图改善这种情况,但我认为它已经失败了,因为它违背了REST开发人员的极简主义思维方式。好问题。+1 - Allain Lalonde
3个回答

6

是的,人们正在尝试为REST制定描述语言。最流行的努力是WADL。SO上有很多关于WADL的问题。那么这是个好主意吗?在我看来并不是。

REST不需要超越超媒体已经具备的发现模型,因为它试图解决的问题与Web服务所在的不同架构层次相关。Web服务将数据传递给应用程序的业务逻辑/领域模型。REST则是关于传递内容和行为到一个表示层。

那么打个比方?想象一下C ++中对象和结构之间的区别。结构只是一些客户端进程将要操作的简单数据。这就是Web服务所做的,它返回一块数据,一个结构。当然,也许它执行了一堆服务器端处理来生成结果,但最终结果是一块数据。而REST接口提供一个对象。即它包含了数据和可用于操作该对象的方法。根据定义,如果您了解统一接口并且了解返回的媒体类型,则已经知道可以使用响应做什么。发现机制是多余的。

如果你觉得这很难相信,那么思考一下Web。Web浏览器如何发现Web页面?Web没有正式的发现机制,但是有一个世界的信息可以用Web浏览器发现。


我不同意这个答案,我认为REST不仅限于向“表示层”提供内容(和行为)。而且我认为将行为绑定到REST是一种不好的做法。 - ElLocoCocoLoco
@ElLocoCocoLoco 如果您能帮助我理解“将行为绑定到REST”违反了哪些REST约束以及这些违规的负面系统影响,那么也许我就能够理解为什么您认为它是一种“不良实践”。 - Darrel Miller
你懂法语吗? https://fr.wikipedia.org/wiki/Representational_State_Transfer 在提供“行为”时,我认为您正在谈论REST服务的第6个(可选约束)Code-On-Demand。如果是这种情况,那通常被认为是一种不好的做法,因为“状态变得依赖于客户端而不是服务器,这与规则2相矛盾。”如果您正在谈论4.3点“响应解释其性质”,即使在这种情况下,我们有时需要一些服务在执行请求本身之前解释结果的性质(自适应/自动发现系统)。 - ElLocoCocoLoco
@ElLocoCocoLoco 是的,我懂法语。不,我不是在谈论COD(使命召唤游戏)。响应中链接关系类型的存在描述了可用的行为和交互机制。响应中“next”链接的存在告知客户端是否可以转移到“next”资源。这是对潜在行为的描述。 - Darrel Miller
@ElLocoCocoLoco,你读过这篇文章吗?http://roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven 在你开始教育他人之前,我可以恳请你花更多时间研究REST的真正含义吗? - Darrel Miller
显示剩余3条评论

1

1

有两种方法可以查找信息。一种是使用100%明确的语言,另一种是使用自然语言。介于两者之间的任何东西,如YQL,注定会失败,因为它既不提供明确的结果,也只能在其作者所宣传的示例中正常工作。

我在http://zscraper.wordpress.com/2012/05/30/enough-with-crawling-2上发表了博客文章。我的个人立场是,如果您首先做好功课,即研究目标领域并找出如何明确查询它,您将始终获得最准确的结果。

为了回答您的问题并给您提供一个替代方案,请尝试Bobik。这是一个云支持的爬网服务,您可以通过REST API控制它。使用传统语法(Bobik支持Javascript、JQuery、XPATH和CSS)组合您的“查询”,并从任何客户端环境(网页、移动应用程序或您的服务器)调用Bobik来运行它们。

希望这可以帮助到您。


3
网站 http://usebobik.com 已经不存在了。我也认为该服务已不再提供。 - j.raymond

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接