在我学习软件开发之前,API 听起来像是一种啤酒(IPA,印度浅色艾尔)。现在我常常应用这个术语,事实上最近我还尝试在酒吧里点了一个 API,后果酒保给了我一个:
404 资源未找到的回应
无论是在科技行业还是其余中央,我遇到很多人对这个相当广泛的术语有着含糊的了解。从技术上讲,API 代表应用程序编程接口,大多数大公司都曾为客户或外部应用构建过 API。但如何用简略的语言来解释 API 呢?除了开发和商业中应用的定义外,是否还有更宽泛的含意?首先,让咱们退后一步看看网络自身是如何运作的。
1、万维网和近程服务器
当我想到网络时,我会设想一个由连贯在一起的服务器组成的宏大网络。互联网上的每个页面都存储在某个近程服务器上。近程服务器其实并不神秘——它只是位于近程计算机中的一部分,专门用于解决申请。
为了更好地了解这个概念,你能够在本人的笔记本电脑上启动一个可能将整个网站提供给互联网应用的服务器(事实上,在将网站公布给公众之前,工程师们就是应用本地服务器进行开发)。
当你在浏览器中输出 www.baidu.com 时,一个申请被发送到 Baidu 的近程服务器。一旦你的浏览器收到响应后,它会解析代码并显示页面。对于浏览器(也称为客户端)来说,Baidu 的服务器就是一个 API。这意味着每次拜访 Web 上的页面时,您都与某个近程服务器的 API 进行交互。
API 并不等同于近程服务器——而是指接管申请和发送响应的那局部。
2、将 API 作为服务客户的路径
您可能据说过公司将 API 打包成产品,例如,Weather Underground 发售其天气数据 API 的拜访权限。示例场景:
您的小型企业网站上有一个用于给客户预约的表单,您心愿让客户可能主动在 Google 日历中创立一个蕴含该预约详细信息的事件。
API 应用:想法是让您网站的服务器间接与谷歌服务器进行通信,申请创立具备给定详细信息的事件。而后,您的服务器会收到谷歌发回来、解决它并向浏览器发送相干信息(如用户确认音讯)。或者,你能够间接通过你本人服务器向谷歌服务器发送 API 申请。
这个 Google 日历 API 与其余近程服务器 API 的区别是什么?
从技术角度看,区别在于申请和响应格局。 要出现整个网页,浏览器须要 HTML 格局响应,其中蕴含示意代码;而 Google 日历 API 调用只返回数据——可能以 JSON 格局返回 **。
如果你们网站服务端正在发动 API 申请,则意味着你们网站服务端就是客户端(相似于当你应用浏览器导航至某个网站时,浏览器就变成了客户端)。
从用户角度来看,API 容许他们在不来到您的网站的状况下实现操作,大多数古代网站都应用了一些第三方 API。而且,许多问题曾经有了第三方解决方案,无论是以库还是服务的模式。通常应用现有解决方案更容易、更牢靠。开发团队将他们的应用程序分成多个通过 API 互相通信的服务器并不常见。为主应用程序服务器执行辅助性能的服务器通常被称为微服务。
总之,当公司向客户提供 API 时,这意味着他们构建了一组专用 URL,返回纯数据响应——也就是说响应中不会蕴含像图形用户界面(如网站)那样具备表现性累赘的内容。你能够用浏览器发动这些申请吗?往往能够。因为理论 HTTP 传输以文本进行,浏览器会尽最大可能显示响应。
例如,你甚至能够在没有拜访令牌状况下间接通过浏览器拜访 GitHub API,当您在浏览器中拜访 GitHub 用户 API
{
"login": "petrgazarov",
"id": 5581195,
"avatar_url": "https://avatars.githubusercontent.com/u/5581195?v=3",
"gravatar_id": "","url":"https://api.github.com/users/petrgazarov","html_url":"https://github.com/petrgazarov","followers_url":"https://api.github.com/users/petrgazarov/followers","following_url":"https://api.github.com/users/petrgazarov/following{/other_user}","gists_url":"https://api.github.com/users/petrgazarov/gists{/gist_id}","starred_url":"https://api.github.com/users/petrgazarov/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/petrgazarov/subscriptions","organizations_url":"https://api.github.com/users/petrgazarov/orgs","repos_url":"https://api.github.com/users/petrgazarov/repos","events_url":"https://api.github.com/users/petrgazarov/events{/privacy}","received_events_url":"https://api.github.com/users/petrgazarov/received_events","type":"User","site_admin": false,"name":"Petr Gazarov","company":"PolicyGenius","blog":"http://petrgazarov.com/","location":"NYC","email":"petrgazarov@gmail.com","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 曾经能够在您的代码中应用了。从这段文字中提取数据非常容易,而后您能够随便解决这些数据。
3、A 代表“应用程序”
在完结之前,让咱们再举几个 API 的例子。“应用程序”能够指很多货色。以下是 API 语境中的一些示例:
- 具备明确性能的软件。
- 整个服务器、整个应用程序或仅仅是一个小局部的应用程序。
基本上任何能够 从其环境中明确辨别进去的软件都能够成为 API 中的“A”,并且可能也会有某种类型的 API。 假如您在代码中应用了第三方库,一旦合并到您的代码中,库就成为了您整体应用程序的一部分。作为一个独特的软件,该库可能具备容许与您其余代码交互操作所需 API。
另一个例子:在面向对象设计(Object Oriented Design)中,代码被组织成对象。你们可能领有数百个已定义好可互相交互操作对象。每个对象都具备 API —— 一套公共办法和属性供它与你们其余对象进行交互操作。此外,对象外部逻辑也可能设置私密性质,这意味着它对外界范畴暗藏起来(不属于 API)。
通过咱们所涵盖内容,心愿大家可能更深刻了解 API 的狭义概念以及现今常见术语使用形式。
Eolink Apikit - 跨平台(Windows、Mac、Linux、Browsers…)的 API 开发测试工具,反对 REST、Websocket、gRPC、TCP、UDP、SOAP 等协定,联合 API 设计、文档治理、自动化测试、监控、研发治理和团队合作的一站式 API 生产平台。
初创团队收费申请通道: link.feishu.cn/share/base/form/shrcnpMe5dWtOkq2GoRWQ97oLlc