如何发现RESTful Web服务?

26
当我想要找到所需功能的“大型”Web服务(基于WS-*/WSDL)时,我可以直接在谷歌上搜索“.... filetype:wsdl”,因为谷歌也会索引WSDL定义。或者我可以使用一些已经为我爬取了WSDL定义的注册表,例如SeekDa.com或ServiceFinder。
当我想要查找RESTful Web服务(RESTful Web API)时,我只能依靠社区,因为不可能区分RESTful Web服务的URI和其他Web资源(例如网站URL),因此任何专注的网络爬虫都无法百分之百确认:这是RESTful Web服务的URI。因此,我会去像ProgrammableWeb.com这样的网站,并希望有人已经使用/发现了我正在寻找的服务并在那里注册了它。
最近,我在寻找缩略语展开的Web服务。我在像ProgrammableWeb这样的门户网站中找不到它,因为没有人将其放在那里。最终,我被迫浏览了几个缩略词词典网站,进行了挖掘和钻研,最终我在以RESTful形式提供Abbreviations.com Web服务API中找到了它。这花费了我很多时间!
还有其他方法可以在Web上发现RESTful Web服务吗?
4个回答

14

有一个在REST API Design Handbook中推荐的惯例,即在服务的根目录下公开一个/api端点。这将返回一个XML或JSON响应,其中包含您的服务支持的“子”资源,例如/api/products。


1
你有那本指南的链接吗?这将极大地增强你的回答... - Donal Fellows
1
这只是一种惯例,完全由开发人员决定是否愿意暴露他们的端点。 - mobby

10

REST web服务有一个类似于WSDL的文件:它被称为WADL。


2
谢谢。假设RESTful Web服务是用WADL描述的,那是个好主意。但目前这只是一个想法,不是常见的实践。所以回到现实世界:我现在怎样才能找到有趣的RESTful Web服务呢? - dzieciou
除非你了解它们,否则你无法使用。这就是WADL试图解决的问题。 - Stefano Borini
1
好的。顺便问一下,您知道有关从API文档和相关网页中提取WADL定义的研究吗?是否有任何尝试?这将是一种不错的方式,可以半自动地生成WADL,并为RESTful Web服务的当前缺乏接口提供一些平稳的过渡(演化而非革命)。 - dzieciou

10

REST的理想状况是服务与网页一样易于使用,它们不需要注册表。[我必须承认我并不完全理解这个RESTful世界的影响,没有WSDL和注册表就像是骑着没有稳定器的自行车。]

在早期的Web(Google之前)中,我们如何找到页面?实际上是通过口耳相传和一些关键起点。就我所知,REST服务基本上处于谷歌之前的阶段。

我不同意“无法区分RESTful Web服务的URI和其他Web资源”的说法 - 如果我们遵循链接,我们会得到某些类型的内容,如应用程序/xml和应用程序/json,它们将是相当强的指标,不是吗?


谢谢。我没有考虑服务响应的 MIME 类型 :-) - dzieciou
只是一条评论:你永远不确定 application/xml 是在调用时生成的(作为服务响应),还是它是一个静态的 XML 文档。因此,这只是可能的指标之一。还有其他建议吗? - dzieciou
1
你不需要知道那个。只要满足URI,你不能要求它应该如何提供。有些答案可以预先计算并缓存。 - djna
我可能需要知道这个,以尝试从相关网站中提取功能,自动生成WADL定义或至少尝试这样做。我不想浪费时间在非Web服务API的资源上。例如,以下似乎是一些静态数据:http://data.eastmoney.com/flash2/data2_1100.xml?r=(具有application/xml MIME类型)。虽然它也可能是按调用生成的。我看不到HTTP响应的明确特征,表明它来自Web服务(即使是预计算和缓存)还是一个静态文档。 - dzieciou
3
我的观点是这确实是一个符合RESTful标准的服务!因为你有一个确认的URI和一些符合要求的结果。如果服务的实现是一些运行中的JAVA或者我们从磁盘中获取,这个"接口"是无法区分的。它像REST服务一样工作并且表现,对于你的目的来说它就是一个服务。如果响应的某个方面不符合服务的形式,那么它就不是一个服务,即使它是由Java生成的。你只能查看URI和响应,仅此而已。你无法区分静态和动态。考虑"http://universe/ended" -> {"no"}。 - djna
这可能有些过时了,但编写通用工具来消耗REST服务是不可能的。WSDL更加复杂,但它允许我的工具为我生成客户端终点。个人经验:我目前正在尝试消耗没有文档的rest服务。这非常麻烦。只能查看Web浏览器日志并做出有根据的猜测... - Gusdor

3

SoapUI现在可以发现REST服务。它作为代理,记录所有通过的请求/响应。有了请求和响应,SoapUI重新创建了服务的描述/定义。现在这些定义可以以WADLWSDL格式存储(在XML世界中作为WSDL和XML模式)。还可以以Swagger格式存储。我更喜欢Swagger。Swagger可以直接从SoapUI存储在SwaggerHub中,这就像是源代码的GitHub。SwaggerHub是许多API管理系统之一。


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