网站API的黄金标准是什么?Twitter、Flickr、Facebook等。

61

目前似乎有两种网站API类别。

  1. 这些API允许扩展网站功能,例如Facebook、Myspace等。这些API看起来非常多样化。

  2. 这些API允许与现有的网站功能进行交互,例如Twitter、Flickr等。 它们都声称是基于REST的,但实际上只是“通过HTTP传输数据”。

如果您要创建一个既允许功能扩展又允许外部交互的网站,您将使用哪些现有的API作为参考模型?


斯特雷桑效应,3... 2... 1... - user47322
4
“斯特赖珊效应”主要发生在线上,它是指试图审查或删除某些信息的企图,却意外地造成了该信息被广泛传播,且比如果没有进行审查所导致的传播范围更大的现象……您不懂这是什么意思吗? - Mongus Pong
一个更好的问题应该是“好的Web API有哪些特点?”我认为这就是你想要了解的内容。或者这就是你应该想要了解的内容。下面是我的回答尝试。 - psychotik
@Pongus 嗯,差不多就是这个意思。我说的是Jeff在Twitter上发布这个问题,导致他获得了大量的赞同票。虽然它并不完全是“斯特雷桑效应”,但它有着相同的要点。 - user47322
@Charlie Somerville,你在吗!可能更多的是Katie Price的影响... :o) - Mongus Pong
15个回答

38

我们自己在这个领域进行一些研究。就网站API参考资料的“黄金标准”而言,没有太多可供参考的。

最常见的网站API包括:

另外还有以下列表:

http://www.pingable.org/the-top-15-web-apis-for-your-site/

有人推荐书籍Restful Web Services作为参考资料。

(如有需要,可以编辑上述列表以添加其他知名网站的API)


+5。现在我说的是关于“斯特雷桑效应”的事情吗? :P - user47322
3
虽然这些API可能很“受欢迎”,但其中许多肯定不是“最佳标准”。例如,Flickr API特别可笑。它自称为RESTful API,但实际上根本不是! - nbevans
1
@Nathan,看到“请随意编辑”的地方了吗?好的...请随意!只需点击编辑链接即可! - Jeff Atwood
我也对这个话题很感兴趣。最近我发现了Mashery - 他们似乎在你的公共API之上添加了一层,可以帮助处理权限和用户请求限流的问题。 - Héctor Ramos
Sun Cloud API是迄今为止最接近REST风格API的东西。 - Darrel Miller

23

16

我曾经使用过几个API,下面直入主题

  • Facebook

    • 优点:干净且相对一致。性能表现良好且大多数东西在逻辑上都是有道理的。FQL非常整洁。XML和JSON选项。没有响应格式的固定设想,只有你真正需要的。
    • 缺点:经常变化且没有警告。官方API库非常糟糕。许多调用的文档质量差或缺失。非标准认证(某些人可以称之为好?)
  • Myspace

    • 优点:开放标准(oAuth认证,Opensocial终端点)
    • 缺点:经常出错。oauth的使用非常不标准,使大多数客户端库崩溃。官方客户端库很糟糕。
  • Photobucket(免责声明:我编写了Photobucket API的服务器端)

    • 优点:开放标准认证(oauth)。xml、json,甚至是php序列化数组格式作为响应参数。忠实REST(对“名词”URL进行get/put/delete/post操作)。
    • 缺点:没有太多客户端库。标准oauth库的架构挑战(用户位于子域上,调用必须发到子域,因此URL必须更改)。
  • Twitter

    • 优点:相当一致(尽管API与搜索API有差异)。良好的REST实践。OAuth认证以及支持老式Basic。
    • 缺点:错误率(与Twitter的其他部分基本一致)。某些返回值格式奇怪(例如它们的日期格式)。

理想特点

  • 我不太赞成“严格”的REST。在某些客户端语言中,PUT和DELETE会引起问题。GET和POST似乎足够了,只要使用适当的“动词”。此外,如果RPC类似的函数名称对我来说是可以接受的,只要它们是逻辑的,甚至是URI的一部分。在这种情况下,对象IDS仍然需要非常一致。
  • 标准的身份验证/授权。基本/Digest方式也可以,但我更喜欢OpenID/oAuth(或者如果你想尝试最新技术,可以使用WRAP)。自己编写身份验证/授权意味着你必须解释其全部功能,并且可能需要为每个人编写客户端库。
  • 标准的数据类型。确保您在数据类型上保持一致性(要么是“true”,要么是1,而不是混合使用),并支持最通用的标准。日期时间应该遵循ISO8601标准。地理位置应该“看起来”像GeoRSS等。您应该能够为返回类型创建XSD/relaxNG/任何严格验证器。同时,对于输入也应遵守同样的标准。
  • 简单的返回结构。 XML-RPC/JSON-RPC有些好处,因为您知道自己正在获得什么,但无论如何,如果我不能轻松使用JSON或类似PHP的SimpleXML解析您的返回类型,并将其序列化为一致的哈希,则会感到恼火。
  • 支持扩展/扩展而不破坏原有功能。不要把自己编码到一个死角,让API扩展变得困难。尽力做出好的决策,以免不断更改。
  • 文档!确保文档很好,并解释所有内容。即使这样,文档也不够好,因此请确保有专门的时间来处理它,并且有一个支持论坛或其他方式来使其保持最新。
  • 所以说...介于Facebook和Twitter之间。当然,我对Photobucket上的一些功能有偏见,但我也讨厌其中的一些功能。


    Twitter在“良好的REST实践”方面存在问题。Twitter不使用超媒体来发现链接,并且由于其使用通用媒体类型,响应并不自我描述。它远非符合RESTful标准。 - Darrel Miller
    @Darrel - 我同意,但是一个纯粹的RESTFUL服务只有在它将被机器人消费和更新时才是必要的 - 否则,你会花太多时间担心是否符合RESTful标准,而不是交付产品。在我看来。 - schmoopy
    @schmoopy 大多数静态HTML网站都是纯粹的RESTful服务。它们只被机器人使用吗? - Darrel Miller
    @Darrel - 是的,只有谷歌读取它们,我们读取谷歌;-) -- 我唯一的观点是,纯粹的RESTful可能不是理想的,因为你的API是由开发人员而不是机器人使用的 -- 通常情况下,如果网站要求用户用解码器环来阅读它们,那么我相信网络会朝着不同的方向发展。 - schmoopy

    11

    在我看来,API文档与API的实际设计同等重要(甚至更重要)。

    优秀、简洁的文档可以弥补设计上的任何缺陷。在查看已发布的各种链接之后,这就是我所学到的。特别地,Last.fm的文档非常好:易于浏览和理解。


    8

    Last.fm的API一直是网络上最好维护的API之一。它也比大多数API存在时间更长,因为它最初就是基于这个目的创建的。

    http://www.last.fm/api


    1
    你说到了我的心坎儿里 :) - Brian Gianforcaro
    看起来一点也不符合RESTful的规范,因此在这方面失去了很多分数。 - nbevans
    是的,我只是在查看它作为参考,但我不能认真对待它,因为我可以传递一个无效的方法路由,仍然会得到一个200 ResponseCode - http://ws.audioscrobbler.com/2.0/?method=user.willywobble&format=json 返回一个200的HttpStatusCode - 在我看来应该是404,因为它不是一个找到的“资源”。 - schmoopy

    8
    关于Jeff列出的大型API列表:我非常确定"common"并不意味着"Gold Standard"。
    无需手动列出广泛使用的API清单。要获取清单,请查看http://www.programmableweb.com/apis/directory/1?sort=mashups
    由于我喜欢REST作为宽松标准,所以我会说当API“有意义”且“直观”时,它是“黄金”的。
    Twitter(http://apiwiki.twitter.com/)、Github(http://develop.github.com/)和Last.FM(http://www.last.fm/api)对我来说都很有意义,并且经过深思熟虑(正如Brian已经指出的那样)。

    在我目前的日常工作中,我也经常使用OpenSocial,其中URI感觉非常自然,但也以其独特的方式扩展了REST标准。

    如果您喜欢严格和安全,请使用SOAP。


    SOAP? 不好意思,我要去那边吐一下... - JavaRocky

    4
    我建议您查看OpenSocial,这是一个创建社交网络API标准的运动。他们使用REST并采用“用户”为中心的方法。即使不是完全基于社交的网站,这也是一种非常有文档支持的方法,可能会对您有所帮助。如果您正在寻找一些内部代码实现,请查看Drupal的钩子系统和WordPress。

    http://code.google.com/apis/opensocial/


    3
    我认为最好的回答方式是列举优秀web API的一些特点,而不是引用例子。如果你喜欢Twitter/Facebook等API,你觉得这些API有哪些吸引人的方面呢?
    我先来说几个:
    1. 良好的API文档,包括限制和使用政策。这使得你在开发时可以信心十足地快速进行开发,而不是猜测参数的含义和返回值。
    2. 技术/语言无关的API。优秀的API应该易于使用,提供相同的功能,可在多种语言和平台上使用。
    3. 良好的支持。总会出现一些问题,能够及时解决这些问题的维护者将带来更可用的API。
    4. 分层API集合。当API被整齐地分层时,广泛的开发人员可以使用他们所需的部分而不需要拉入多余的层。此外,它也迫使创建者考虑清晰、组件化的API。
    请在评论中添加更多内容。

    2

    2

    我对其他API没有经验,但即使随着时间的推移,Facebook API仍然很糟糕。它远远达不到“黄金标准”。相反,人们会因为要克服困难而咬紧牙关,因为一旦他们终于做对了,它可以增加很多价值。


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