在Web上创建API是什么意思?

6
我有一个使用ASP.NET MVC构建的网站,使用大量jQuery客户端交互来构建实时聊天室。许多用户解析了javascript并发现了它发布到的URL,以便与聊天进行交互。他们开始创建机器人玩闲聊频道里的游戏。
这些用户不断要求提供“API”,以使编码更加容易。我认为我知道什么是API,但我仍然有点模糊。API不是任何第三方都可以与之交互的接口吗?
对于我的网站来说,构建web API意味着什么?只是一份带有URL列表和如何与其交互的文件吗?
我也听说过Web服务和Web引用。它们是什么?构建Web服务意味着什么?这是否与Web上的API有关?

API通常是开发人员与应用程序交互的文档化方式。它通常提供发送和获取数据的功能,通常通过URL使用GET请求。 - Ivan
5个回答

5
API是“应用程序编程接口”的缩写。它在最基本的层面上,是任何设计用于其他软件与之交互或通信的接口。从某种意义上说,您的开放URL也是API。当然,作为用户界面的入口点通常并不适合编写其他软件,因此虽然它们是API,但它们可能不是很好的API,您可能很快就会遇到性能问题。
Web API是运行在Web服务器上的应用程序的入口点,允许其他工具以某种方式与该Web服务进行交互。将其视为软件的“用户界面”。但是,您的软件需要适当的安全性和访问控制。考虑速率限制,否则您可能会面临非常激进的机器人淹没您的服务器的风险。但是,该速率限制也需要在人类用户界面中,否则有人将简单地针对其编写脚本。
Web服务是运行在面向Internet的服务器上的任何应用程序,可以通过Internet进行交互,通常具有API,允许其他基于Web的实用程序将您的服务用作其功能的一部分。
最终,任何Web API都只是URL列表以及如何与它们交互。现代Web API设计几乎总是涉及身份验证和安全令牌(您可能应该学习Twitter等使用的OAuth身份验证模型),并且有各种竞争标准用于发送数据,其中JSON是更受欢迎的选项之一。记录您的接口确实将其转换为API,但您可能需要花费一些时间来决定这是否真正是软件与您的Web服务交互的“正确”方式-一旦发布了API,更改它将会破坏任何依赖于您的服务的内容!

听起来我非常正确。这是一个非常有信息量的答案。我实际上已经使用了身份验证、垃圾邮件预防,甚至返回格式良好的JSON。我可能会改进一些东西并且好好记录它,然后将信息发布给他们。很棒的东西,非常感谢! - Chev
1
太棒了,听起来你已经解决了大部分难题!你说得对,文档就是你所需要的一切。如果你在没有基本的Web API设计培训的情况下正确地解决了所有这些问题,那么你对此有很好的直觉,并且很可能会在设计和实现Web服务方面取得巨大成功。 - Adam Norberg
我的想法是让数据尽可能简单,这样服务器就不会强制或暗示数据的使用方式,而这应该由客户端代码来决定。我想我没有意识到自己在构建一个不错的API。再次感谢。 - Chev

4
一个API(应用程序编程接口)是一组已建立的协议,用于外部程序与您的应用程序交互。正如您所说,用户解析了javascript并发现了您使用的URL,然后使用这些URL构建程序与您的应用程序进行交互。
从技术上讲,您已经拥有一个API,并且他们已经发现了它 - 控制打开聊天室、发布到房间、阅读其他人帖子的URL集合。然而,您的用户要求更加建立和结构化的方法来实现这一点。
这样的方法可能包括一种对应用程序的身份验证,以及从应用程序传递回来的消息和/或数据,允许外部程序知道其请求发生了什么(而不仅仅是返回HTML或什么都没有)- 比如“成功”,“错误”,“不可用,请重试”等等。

1
顺便提一下,可以查看Twitter的API文档网站http://apiwiki.twitter.com/w/page/22554679/Twitter-API-Documentation ,这是一个完整的Web应用程序API可能的例子。 - Yardboy

2

这将是一组函数,为ASP.NET MVC提供接口。例如“开始聊天”或“发送消息”的功能。它还涉及一些安全调整,以让其他用户访问您的服务器。


这只是一个URL列表和它们所期望的参数吗? - Chev
^^^ 是的,确切地说,定义良好的URL可以执行有用的操作。 - david van brink
答案取决于你的后端。你的通信是通过URL完成的吗?另一个需要考虑的事情是如何让其他人与你的后端接口。 - Mikhail
是的,我的程序完全通过URL(在MVC中的操作方法)实现,并且这些方法返回JSON数据,客户端可以使用。 - Chev

1

他们要求使他们的机器人发布的URL非常清晰和明确定义其功能。

通常,这些“Web API”在POST中采用结构化数据或在GET中采用CGI变量,不返回HTML,而是返回XML、JSON或其他编程友好的返回数据。

这就是要点!


太棒了。现在更有意义了。我已经从我的现有API返回JSON,所以这很好知道。你对Web服务有什么想法吗? - Chev

1
在最简单的情况下,您可以只做您倒数第二段建议的事情,并记录您已经在使用的API(因为听起来他们似乎已经可以在某种程度上使用您的“内部”API)。
但是,如果您想要做得“正确”,您可能需要回过头去查看您编写的代码,并找到使其对第三方更加用户友好的方法,并且,如果您将使其易于人们使用,还有可能“加固”它以防攻击。

有道理。很酷。那么什么是Web服务?有什么区别吗?我的聊天API也是Web服务吗? - Chev
嗯,我想Web服务既有通用的上下文(在这种情况下,您的API是一个Web服务),也有更具体的上下文(当谈论诸如WCF Web服务之类的东西时)。在后一种情况下,Web服务只是通过Web执行API的一种方式。 - Tim

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