API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节
应用程序接口
想象一下像餐馆菜单中的API。菜单提供您可以订购的菜肴列表,以及每道菜的描述。当您指定所需的菜单项时,餐厅的厨房可以完成工作并为您提供一些成品菜肴。你不确切知道餐厅如何准备食物,你真的不需要。
类似地,API列出了开发人员可以使用的一系列操作,以及他们所做的事情的描述。开发人员不一定需要知道如何构建操作系统并显示“另存为”对话框。他们只需要知道它可以在他们的应用程序中使用。
这不是一个完美的比喻,因为开发人员可能必须提供他们自己的数据到API来获得结果,所以也许它更像是一个高档餐厅,你可以提供厨房将使用的一些自己的成分。
但它的准确性非常准确。API允许开发人员通过利用平台的实现来完成细节工作,从而节省时间。这有助于减少开发人员需要创建的代码量,还有助于在同一平台的应用程序之间创建更高的一致性。API可以控制对硬件和软件资源的访问。
API使开发人员的生活更轻松
假设您想为iPhone开发应用程序。Apple的iOS操作系统提供了大量的API - 正如其他操作系统所做的那样 - 让您更轻松。
例如,如果要嵌入Web浏览器以显示一个或多个网页,则无需为您的应用程序从头开始编写自己的Web浏览器。您可以使用WKWebView API在应用程序中嵌入WebKit(Safari)浏览器对象。
如果您想从iPhone的相机中捕捉照片或视频,则无需编写自己的相机界面。您可以使用相机API在您的应用中嵌入iPhone的内置相机。如果不存在API以使这一点变得简单,那么应用程序开发人员必须创建自己的相机软件并解释相机硬件的输入。但Apple的操作系统开发人员已经完成了所有这些艰苦的工作,因此开发人员可以使用相机API嵌入相机,然后继续构建他们的应用程序。而且,当Apple改进相机API时,所有依赖它的应用程序都会自动利用这一改进。
这适用于每个平台。例如,您想在Windows上创建一个对话框吗?有一个API。想在Android上支持指纹认证吗?还有一个API,所以你不必测试每个不同的Android制造商的指纹传感器。开发人员不必一遍又一遍地重新发明轮子。
API控制对资源的访问
API还用于控制对应用程序未必具有使用权限的硬件设备和软件功能的访问。这就是API经常在安全性方面发挥重要作用的原因。
例如,如果您访问过某个网站并在浏览器中看到该网站要求查看您的确切位置的消息,则该网站会尝试在您的网络浏览器中使用地理定位API。Web浏览器公开这样的API,使Web开发人员可以轻松访问您的位置 - 他们可以询问“您在哪里?”,浏览器可以轻松访问GPS或附近的Wi-Fi网络以查找您的物理位置。
但是,浏览器还会通过API公开此信息,因为它可以控制对它的访问。当网站想要访问您的确切物理位置时,他们可以通过位置API获取它的唯一方法。并且,当网站尝试使用它时,您 - 用户 - 可以选择允许或拒绝此请求。访问GPS传感器等硬件资源的唯一方法是通过API,因此浏览器可以控制对硬件的访问并限制应用程序可以执行的操作。
同样的原则也用于现代移动操作系统,如iOS和Android,其中移动应用程序具有可以通过控制对API的访问来实施的权限。例如,如果开发人员尝试通过相机API访问相机,则可以拒绝权限请求,并且应用无法访问设备的相机。
使用权限的文件系统(如在Windows,Mac和Linux上一样)具有文件系统API强制执行的权限。典型应用程序无法直接访问原始物理硬盘。相反,应用程序必须通过API访问文件。
API用于服务之间的通信
API也用于各种其他原因。例如,如果您曾在网站上看过嵌入的Google地图对象,则该网站会使用Google Maps API嵌入该地图。Google向这些Web开发人员公开了这样的API,然后他们可以使用API在他们的网站上填充复杂的对象。如果这样的API不存在,开发人员可能必须创建自己的地图并提供他们自己的地图数据,只是为了在网站上放置一个小的交互式地图。
而且,由于它是一个API,谷歌可以控制在第三方网站上访问谷歌地图,确保他们以一致的方式使用它,而不是试图嵌入一个显示谷歌地图网站的框架。
这适用于许多不同的在线服务。有一些API可用于从Google翻译中请求文本翻译,或在网站上嵌入来自Twitter的Facebook评论或推文。
该OAuth的标准还定义了一些API,允许您登录到网站与其他服务,例如,使用您的Facebook,谷歌,或Twitter帐户登录到一个新的网站,而不只是该网站创建一个新的用户帐户。API是标准合同,用于定义开发人员如何与服务进行通信,以及开发人员应该收到的输出类型。