用最简单的术语来说,API是应用程序编程接口(Application Programming Interface)的缩写,它是一种软件中介,允许两个应用程序相互通信。 实际上,每次您在手机上查看天气,使用Facebook应用程序或发送即时消息时,您都在使用API。
每次您使用这些应用程序之一时,手机上的应用程序正在连接到Internet并将数据发送到服务器。 然后服务器检索数据,解释数据,执行必要的操作并发送它回到您的手机。 然后,应用程序解释该数据并以人类可读的格式为您提供所需的信息。
但是,API的真正作用是提供一层安全性。 因为您正在进行简洁明了的通话,则电话的数据永远不会完整暴露给服务器,同样,服务器也永远不会完全暴露给您的服务器电话。 而是每个人都与小数据包进行通信,共享只是必要的东西-就像您从驱动器上点菜一样。
多种类型的API
API有很多类型。例如,您可能听说过Java类中的API或接口,这些对象可以让对象在Java编程语言。除了以程序为中心的API,还有还有Web API,例如简单对象访问协议(SOAP),远程过程调用(RPC),也许是最受欢迎的(至少在名称上)代表性状态转移(REST)。
虽然API的功能可能非常简单明了,但选择要构建的类型的过程,了解为什么要构建API最适合您的应用程序,然后对其进行有效设计是被证明要困难得多。
建立API的最大挑战之一就是建立一个持续。这对于Web API尤其如此,因为您要同时创建两个您和您的用户之间的合同以及之间的编程合同您的服务器和客户端。
接下来将介绍一些不同类型的API,但是然后我们将改变方向,并专注于构建Dr.定义的REST API。
罗伊·菲尔丁(Roy Fielding)。我们将介绍经常被忽略的重要原则-尽管其中一些可能看起来有些痛苦,或者就像它们创造了更多工作,您会发现遵循这些最佳做法不仅会创建更好的API,但这样做可以节省大量时间和金钱。
WEB API
Web API,也称为Web服务,为Web应用程序或需要通过以下方式相互连接的应用程序互联网进行交流。 迄今为止,有超过13,000个公共API从检查交通和天气,到更新您的社交媒体状态并发送推文,甚至付款。
除了13,000个公共API,还有数十万个更多私有Web API或不可供以下用户使用的API公司用来扩展其能力的普通公众以及广泛的用例(包括多个设备)中的服务。
私有跨设备Web API的最常见形式之一是是为移动应用程序编写的API,可让公司进行传输数据到手机上的应用程序。
自2005年以来,Web API的使用呈爆炸性增长,并且随着技术的发展,已经创建了Web格式和标准。
早期,最流行的API企业格式之一就是SOAP。随着JavaScript Object Notation(JSON)的出现,我们看到了更多依靠HTTP和JSON-RPC API的增长,而REST具有越来越流行,并迅速成为一般的事实上的标准当今的Web API。
SOAP
SOAP于1998年由Dave Winer,Don Box,Bob Atkinson设计微软公司的Mohsen Al-Ghosein。 它旨在提供用于通信的新协议和消息框架Web上的应用程序。 SOAP可以跨不同的领域使用协议,它需要SOAP客户端来构建和接收不同的请求,并且严重依赖于Web服务定义语言(WSDL)和XML:
<?xml version="1.0"?> <soap:Envelope xmlns:soap="http://www.w3.org/2001/12/soap-envelope" soap:encodingStyle="http://www.w3.org/2001/12/soapencoding"> <soap:Body xmlns:m="http://www.example.com/weather"> <m:GetWeather> <m:ZipCode>94108</m:ZipCode> </m:GetWeather> </soap:Body> </soap:Envelope>
早期,SOAP在所有语言中都没有最强大的支持,对于开发人员来说,使用SOAP集成SOAP通常成为一项繁琐的工作。Web服务定义语言。 但是,SOAP调用可以保留状态,REST并非旨在执行此操作。
XML-RPC
另一方面,远程过程调用或RPC API则很多比SOAP更快,更容易实现。 XML-RPC是SOAP,尽管许多人继续以其最通用的形式使用它,通过HTTP进行简单的调用,数据格式为XML。但是,就像SOAP一样,RPC调用是紧密耦合的,需要用户不仅知道过程名称,而且经常知道参数的顺序为好。这意味着开发人员将不得不花费大量资金遍历文档以利用XML-RPC API的时间,以及保持文档与API同步非常重要,因为否则,开发人员尝试将其集成将是徒劳的。
JSON-RPC
JavaScript Object Notation于2002年推出,由State开发软件公司,由道格拉斯·克劳福德(Douglas Crawford)最著名。格式最初旨在利用JavaScript的功能客户端和浏览器之间的消息传递系统(请考虑使用AJAX)。
然后开发JSON以提供一种简单,简洁的格式,该格式可以还捕获状态和数据类型,以实现快速反序列化。雅虎从2005年开始利用JSON,随后很快Google于2006年成立。此后,JSON迅速得到广泛采用语言支持,已成为大多数开发人员的首选格式。您可以看到JSON为数据格式化带来的简便性与上述SOAP / XML格式相比:
{"zipCode":"94108"}
但是,尽管JSON相对于XML有了显着改进,但JSON-RPC API仍然存在RPC API的缺点,包括紧密相关耦合的URI。 同样,JSON-API已被广泛采用,被MailChimp等公司使用,尽管它们经常被贴错标签为“ RESTful”。
REST
现在是API开发,REST或RESTful API的最受欢迎选择旨在利用现有协议。 虽然REST可以用于几乎所有协议,通常在以下情况下利用HTTP:用于Web API。 这意味着开发人员无需安装库或其他软件,以利用REST API。
根据Roy Fielding博士在其2000年博士学位论文REST中的定义还提供了令人难以置信的灵活性。 由于数据不受限制方法和资源,REST能够处理多种类型的调用,返回不同的数据格式,甚至随着正确实施超媒体。
如在此图表中所见,每种类型的API都有不同的优势,弱点。 REST提供了很大的自由度和灵活性,让您可以构建满足您需求的API,同时满足非常多样化的客户的需求。
与SOAP不同,REST并不限于XML,而是可以返回XML,JSON,YAML或任何其他格式,具体取决于客户端的要求。而且与RPC不同,用户无需知道过程名称或特定过程参数按特定顺序排列。
但是您也失去了在REST中维护状态的能力,例如会话,对于较新的开发人员而言,使用起来可能会更加困难。 这也是了解使REST API变得RESTful的原因以及这些原因的重要性在构建API之前存在一些约束。 毕竟,如果您不了解为什么以某种方式设计事物,您更有可能忽略某些因素并偏离路线,通常会阻碍您甚至没有意识到的努力。