如何用最通俗易懂的方式解释API是什么?

在我学习软件开发之前,“API”这个名词我听起来就像一种啤酒(译者注:有一种啤酒叫“IPA”)。而现在的我经常会使用“API”这个名词以至于我最近在酒吧里居然让酒保给我上一杯API,当然了,他的回应是“抛出一个404的错误:未找到的资源”。

我曾经接触过很多在科技及相关领域的人,他们对这个广泛使用的名词的理解相当含糊或存在不正确的地方。从技术上讲,API全称“Application Programming Interface”,中文译作“应用编程接口”。在有些时候,很多大公司会为客户或内部使用需要而构建自己的API。

但是怎么样才能简单易懂地理解什么是API?为了解答这个疑惑,让我们先来看看网络本身是如何运作的。

WWW和远程服务器

当我一想到Web时,脑海中就会浮现一个连接服务器的大型网络。互联网上中每个页面都存储在远程服务器上的某个位置。远程服务器已经不是什么神秘的东西了,它只是一部分用来优化处理请求的远程计算机。

为了更加清晰地理解,你可以在笔记本电脑上启动一个本地web服务器。众所周知,本地服务器是工程师们在向公众正式发布之前用来开发和测试网站用的。

不严谨地看,相对于浏览器,Facebook的服务器可以视作一个API,这意味着每次访问Web页面时,都会与一些远程服务器的API进行交互。如果严谨一些,API并不等同于远程服务器,API只是服务器的接收请求并发送响应的一部分。

API作为一种服务客户的方式

你可能听说有公司将API打包为产品。例如Weather Underground将气象数据API的访问权限进行出售。

示例场景:你开发的小型商业网站里有一个用于为客户提供预约的表格,你希望你的客户能在这个网站上创建包含预约详细信息的Google日历活动。

API的使用:最直接的想法就是让你的网站服务器直接与Google的服务器通信,并请求创建具有给定详细信息的活动。然后,你的服务器将收到Google的响应并处理它,最后将相关信息返回浏览器,例如向用户发送确认消息。

或者,浏览器可以绕过你的服务器直接向Google服务器发送API请求。

那么Google日历的API与其他远程服务器的API有何不同?从技术角度看,区别在于请求和响应的格式。

要呈现整个网页,你的浏览器需要HTML格式的响应,其中包含提供展示效果的代码,而Google日历的API调用只返回纯粹的数据,比方说JSON格式的数据。如果你网站的服务器正在发出API请求,那么你网站的服务器就是客户端(类似于当你使用浏览器访问网站的时候,你的浏览器就成了客户端)。

从用户角度来看, API允许他们在不离开你的网站的情况下完成操作。大多数现代网站都会使用一些第三方API。无论是库还是服务,许多过去棘手的问题已经有了完善的第三方解决方案。使用现成的第三方解决方案通常情况下会让开发变得更容易和更可靠。

开发团队经常会将应用程序分拆到多个通过API相互通信的服务器,这种做法已经很常见。通过API为主应用程序服务器提供辅助应用功能的服务,我们通常称之为微服务。

总而言之,当公司向其客户提供API时,它意味着已经构建了一组返回纯数据响应的专用URL同时响应将不包含用于展示网站图形用户界面的开销,大大节约了资源和提高相应效率。

你能用浏览器发起API请求吗?当然可以。由于实际的HTTP传输是文本形式进行的,因此你的浏览器将始终尽力展示响应的内容。例如,你可以使用浏览器访问GitHub的API,访问它的时候不需要用访问令牌(access token)来验证身份。以下是你在浏览器中访问一个GitHub用户的API路径时获得的JSON响应(https://api.github.com/users/petrgazarov):

浏览器已经尽力展示JSON响应了。像这样的JSON响应可以直接在你的代码中使用。因为从本文中提取数据很容易,你可以轻松地处理这些key-value形式的数据。

API中的“Application”

最后,让我们再举几个API的例子。API中所指的“Application”可以指很多东西。它在API中可以指代:

- 一款具有独立功能的软件。

- 整个服务器、整个应用程序或只是应用程序的一小部分。

基本上任何可以从整个大环境中剥离出来的代码都可以构成API中的“A”(Application),当然它本身可能就是某种API。

假设你在代码中使用了第三方库,这个库的代码一旦合并到你的代码中,这个库就会成为整个应用程序的一部分。作为一种特殊的软件,这个库会有一个API,实现与你的其余代码进行交互的功能。

再说一个例子:在面向对象设计中,代码被组织到一个个类里面。你的应用程序可能定义了数百个可以相互交互的类。每个类都可能有一个API——一套用于与应用程序中的其他类进行交互的公共方法和属性。类也可能具有私有的内部代码,这意味着它对外部作用域是不可见的,这些代码显然就不能构成API了。

希望通过本文,你能够更加理解API的含义和用法。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180802G05DBO00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励