Web services 最佳SOAP/REST/RPC web API的示例?你为什么喜欢它们?还有什么';他们怎么了?

Web services 最佳SOAP/REST/RPC web API的示例?你为什么喜欢它们?还有什么';他们怎么了?,web-services,rest,soap,rpc,Web Services,Rest,Soap,Rpc,在我的公司,我们开始进入web API以访问和更新我们的数据;最初是针对合作伙伴的,但以后可能会公开。目前,API的外观(例如SOAP、REST、RPC)是完全开放的,我们还没有做出任何决定,因此我对人们认为好的两个web API示例以及您认为好的原因感兴趣 我感兴趣的是使用不同语言的人(我们可能会向使用多种平台的人提供API,特别是包括.NET、Java、ActionScript和JavaScript)对web API的看法,您认为这些API是很好的示例,并且您对这些API有很好的体验 我想谈

在我的公司,我们开始进入web API以访问和更新我们的数据;最初是针对合作伙伴的,但以后可能会公开。目前,API的外观(例如SOAP、REST、RPC)是完全开放的,我们还没有做出任何决定,因此我对人们认为好的两个web API示例以及您认为好的原因感兴趣

我感兴趣的是使用不同语言的人(我们可能会向使用多种平台的人提供API,特别是包括.NET、Java、ActionScript和JavaScript)对web API的看法,您认为这些API是很好的示例,并且您对这些API有很好的体验

我想谈几点:


  • 您喜欢SOAP类型的服务还是REST/RPC类型的服务?我怀疑有平台支持的人(例如NET、Java)会更喜欢SOAP,而使用没有平台支持的语言的人会更喜欢其他语言,但我想验证一下这个假设

  • 您是否关心API是真正的RESTful还是普通的旧RPC样式HTTP GET/POST?如果是的话,你为什么在乎?API正确地描述自己(即,如果它是RPC样式,就不要声称是RESTful的)是否比它实际上是两者之一更重要

  • 我们需要验证谁正在使用该服务。我一直在研究AmazonS3身份验证,它使用公共标识符和私有令牌,用于将请求的参数散列到验证令牌中(这也类似于flickr)。您以前使用过这种类型的身份验证吗?您是如何使用它的?您是否发现任何哈希算法有问题(即您的平台不支持)?您希望在HTTP头中还是在URI中发送哈希

  • 应该如何处理版本控制?有一个
    /v1/
    类型的子目录是一个好主意,这样将来的版本可以一起添加,还是您会做一些不同的事情,比如在请求负载或查询中添加版本?您希望构建的API版本支持多长时间(即,如果引入了v2,在v1的生命周期内,您的期望值是多少)

  • 此外,任何其他的观点和要点都是有用的

    我故意对我们正在实现的API的实际类型保持模糊,因为我正在寻找人们认为好的API和实现机制方面的一般指导,所以这篇文章及其答案将对未来更多的人有用



    注意:我已经搜索过了,但找不到关于这个问题的一般性问题-它们似乎都是特定于某一类型的API的-但是如果它是重复的,请让我知道。此外,如果它应该是社区维基(我认为人们应该得到信用的答案,所以我没有一个),那么请让我知道,我会改变它

    IMHO,这完全取决于你提供的应用程序类型。如果您正在做重要的、大时间的事务,那么一定要使用SOAP(他们称之为WS“死亡之星”)。但是,如果你提供社交应用,那么就使用REST,因为它更简单,更适合于公开黑客攻击。

    这里详细介绍了使用内容类型标题对REST进行版本控制:

    如果你不能下定决心,最终你可以实现它们。在这些情况下,看看其他人是如何做到的是很有用的。我建议您使用开源XML本机数据库,提供您正在研究的三种类型的接口。

    我想看看亚马逊在做什么——显然,从这些东西中赚钱的人会比其他人学到更多的经验教训


    我想看的其他API——salesforce.com和微软的CRM API相当有趣。Twitter也有一个久经考验的REST api。

    REST如果做得正确,很容易理解(HTTP模型),简单(面向资源),几乎可以被每种编程语言(XML)解析。

    你可能对Joshua Bloch的演讲“如何设计一个好的api以及它为什么重要”感兴趣。Joshua Bloch是《高效Java》一书的作者,也是Google的首席软件工程师和首席Java架构师

    摘要:

    幻灯片:

    视频:

    这是我的看法

  • 尽管从Java的角度来看,我实际上更喜欢REST。具有多个名称空间和复杂结构的SOAP信封令人厌恶。它试图解决大部分想象中的问题,却不能有效地解决任何问题。我发现SOAP唯一有用的地方是它有授权和错误的标准。另一方面,通过在根XML元素中包含四个标准属性(username、password、errorCode和errorDescription),可以更容易地解决这两个问题

  • 好的API描述和文档确实是最重要的。在成熟框架中,REST和SOAP的区别主要在于几行配置

  • 对于SOAP,发送哈希作为SOAP安全性的一部分;对于REST,我喜欢将所有内容打包到有效负载中,并避免使用HTTP头进行身份验证。不过,我只有主观原因,因为我不得不与不容易公开HTTP头的框架作斗争

  • 我个人的偏好是对不同的协议版本使用不同的URI。根据我的经验,这为新版本提供了更大的灵活性,而连接到不受支持的协议版本的旧客户端会立即停止工作,原因显而易见。此外,有时您可以将应用程序的旧版本映射到旧URI,以避免在新服务器版本中使用旧的支持代码。

    至于您支持旧版本协议的时间。。。理想情况下,只要你有客户使用它。这更多的是商业决策,而不是技术决策。您应该至少支持一个以前的协议版本。通常在你的房间里