什么是API?

时间:2024-10-22 07:16:05

作者: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中的一些内容:

  1. 一款具有独特功能的软件。

  2. 整个服务器,整个应用程序,或只是应用程序的一小部分。

基本上,任何可以与其环境区别开来的软件都可以是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