作者:Petr Gazarov
译者:忆蓉之心
一、前言
在我学习软件开发之前,API听起来像是一种啤酒。
这篇文章我会大量使用这个词,我就以酒吧为例,比如我向酒吧订购API。
调酒师响应给我一个404:资源未找到。
我遇到了很多人,他们都在科技和其他领域工作,对于这个相当常见的术语含义是什么,他们有一个相当模糊或不正确的理解。
从技术上讲,API代表应用程序编程接口。在某种程度上,大多数大公司都会为其客户构建了API,或者用于内部使用。
但是,你如何用简单的语言来解释API呢?是否有比开发或业务中使用的更广泛的含义?首先,让我们回顾一下网络本身的工作原理。
二、WWW和远程服务器
当我想到网络时,映入脑海的是一个连接着大型服务器的网络。
互联网上的每一个页面都存储在远程服务器上的某处。远程服务器并非那么神秘——它只是远程计算机的一部分,用于处理请求。
为了便于理解,您可以在笔记本电脑上启动一台能够为整个网站提供服务的服务器(实际上,工程师在上线网站之前经常使用本地服务器来开发网站)。
当您在浏览器中输入时,会向Facebook的远程服务器发送请求。一旦浏览器收到Facebook服务器的响应,它将会解释响应代码并显示在页面上。
因而浏览器被称为客户端的,Facebook的服务器就是一个API。这意味着每次访问Web上的页面时,都会与某个远程服务器的API进行交互。
API与远程服务器不同——它是服务器的一部分,用于接收请求并发送响应。
三、API作为服务客户的一种方式
您可能听说过公司将API封装为产品。例如,Weather Underground 对其天气数据 API 的访问。
示例场景:您的网站(小型企业)具有为客户提供预约/约会的表单需求。并且您希望将客户表单的详细信息(如约会)加入到Google日历活动。
API使用:一般思路是让您的网站服务器直接与Google服务器通话,并请求创建具有给定详细信息的事件。然后,您的服务器将收到Google的回复,处理该回复并将相关信息返回给浏览器,例如向用户发送确认消息。
或者,您的浏览器通常可以绕过您的服务器直接向Google的服务器发送API请求。
四、Google日历的API有什么与众不同呢?
从技术角度而言,区别在于请求和响应的格式。
为了呈现整个网页,您的浏览器需要HTML中的响应,其中包含HTML代码,而Google日历的API调用只会返回数据 —— 可能采用JSON格式。
如果你的网站的服务器正在发出API请求,那么你的网站的服务器就是客户端(当你用它来浏览网站时,你的浏览器就是客户端)。
从用户的角度来看, API允许他们在不离开您的网站的情况下完成操作。
现代的网站多多少手都会使用一些第三方API。
许多问题已经有了第三方解决方案,无论是图书馆还是服务。使用现有解决方案通常更简单,更可靠。
开发团队将其应用程序分解为多个服务,这些服务之间通过API进行对话并交互。执行主应用的程序服务时,会调用其它服务来辅助,因此,会组建成一个大型的服务网络,我们称之为微服务。
简而言之,当一家公司向其客户提供一个API时,这意味着他们已经构建了一组专门的URL来返回纯数据响应。
你可以用你的浏览器发出这些请求吗?通常,是可以的。由于实际的HTTP传输发生在文本中,您的浏览器将始终尽其所能地显示响应。
例如,您可以直接使用浏览器访问GitHub的API,而不需要访问令牌。以下是在浏览器中访问GitHub用户的API路径时获得的JSON响应。
{ "login": "petrgazarov", "id": 5581195, "avatar_url": "/u/5581195?v=3", "gravatar_id": "", "url": "/users/petrgazarov", "html_url": "/petrgazarov", "followers_url": "/users/petrgazarov/followers", "following_url": "/users/petrgazarov/following{/other_user}", "gists_url": "/users/petrgazarov/gists{/gist_id}", "starred_url": "/users/petrgazarov/starred{/owner}{/repo}", "subscriptions_url": "/users/petrgazarov/subscriptions", "organizations_url": "/users/petrgazarov/orgs", "repos_url": "/users/petrgazarov/repos", "events_url": "/users/petrgazarov/events{/privacy}", "received_events_url": "/users/petrgazarov/received_events", "type": "User", "site_admin": false, "name": "Petr Gazarov", "company": "PolicyGenius", "blog": "/", "location": "NYC", "email": "petrgazarov@", "hireable": null, "bio": null, "public_repos": 23, "public_gists": 0, "followers": 7, "following": 14, "created_at": "2013-10-01T00:33:23Z", "updated_at": "2016-08-02T05:44:01Z" }
浏览器似乎已经很好地显示了JSON响应。这样的JSON响应已经可以在您的代码中使用了。对于程序而言从这个文本中提取数据很容易。然后你可以做任何你想要的数据。
五、A是“应用程序”
让我们再举几个API的例子。
“应用程序”可以指很多东西。以下是API中的一些内容:
一款具有独特功能的软件。
整个服务器,整个应用程序,或只是应用程序的一小部分。
基本上,任何可以与其环境区别开来的软件都可以是API中的“A”,并且可能还会有某种特殊类型的API。
假设您在代码中使用第三方库。一旦合并到您的代码中,库就成为您整个应用程序的一部分。作为一个独特的软件,该库可能会有一个API,允许它与其他代码进行交互。
这里还有另一个例子:在面向对象设计中,代码被组织到对象中。您的应用程序可能会定义数百个可以相互交互的对象。
每个对象就是一个API——一组公共方法和属性,用于与应用程序中的其他对象进行交互。
一个对象也可能具有私有的内部逻辑,这意味着对于API而言,它是不可见的。
通过本文的学习,我希望你能用一些的常见的场景来解释API。
六、参考
/wiki/Hypertext_Transfer_Protocol
/watch?v=72snZctFFtA&feature=
/computing/computer-programming/programming/object-oriented/p/object-types
原文链接:/what-is-an-api-in-english-please-b880a3214a82