当前位置: 首页 > 科技观察

API难解释?这次是啤酒和积木

时间:2023-03-12 02:06:48 科技观察

【.com快译】当初我刚开始学习Web前端开发,第一次接触“API”的时候,这个词听起来像是某种精酿啤酒。后来,我有一个亲身经历:去酒吧要一杯API,酒保会抛出“404:resourcenotfound”错误。是我让人们发笑。API是我们一直使用的东西。尽管API无处不在,但许多人,甚至是技术专家,对它们是什么以及它们如何工作都只有模糊的理解。说真的,请你的同事立即解释API。如果有人立即说“API代表应用程序编程接口。它是让软件应用程序相互通信的接口……”我会请他喝啤酒。大多数人真的无法阐明API。让我们改变它。“A”表示适用。该术语的第一部分高度依赖上下文。根据具体的使用场景,“应用程序”实际上可以表示很多东西:整个服务器、整个应用程序本身和它需要的数据,或者只是应用程序的一小部分。让我们看看这些上下文:服务器、整个应用程序和应用程序的一小部分。让我们首先将Web想象成一个庞大的全球联网服务器网络。互联网上的每个页面都存储在这些远程服务器之一的某个位置,这些远程服务器位于很远的地方,经过优化可以处理向您的浏览器提供该特定网站的请求。因此,如果您在浏览器栏中输入www.github.com,Chrome、Firefox或Safari等浏览器向GitHub的服务器发送请求,服务器将礼貌地发回显示页面及其内容所需的所有代码在您的本地计算机上。浏览器收到这个响应后,解释代码并显示页面。服务器作为API:从浏览器(又名客户端)的角度来看,GitHub的服务器就是API。这意味着每次访问Web上的页面时,您都在与某些远程服务器的API进行交互。这里的API和远程服务器不一样。相反,它是服务器接收请求和发送响应的部分。作为API的整个应用程序:在初始调用时,GitHub服务器发送整个Web应用程序:表示结构(网站布局和外观)和网站的所有内容。表示这部分基本固定,以HTML代码形式发送,由浏览器显示。内容(网站中包含的动态信息)通常以JSON格式作为数据发送,然后显示在页面上的适当位置。因此,如果我们看一个典型的GitHub页面,展示部分(比如顶部的导航栏、左侧的用户照片和简介、中间的隐藏存储库)几乎保持不变。但是那些代表每日GitHub活动的绿色小方块呢?这会根据用户的贡献而变化。当我们将我们的项目工作推送到GitHub,然后检查以确保它已添加到配置文件页面时,API会告诉浏览器将今天的正方形涂成绿色,这正是它应该的颜色。但是,其他一切都保持不变。不同类型的API允许我们的浏览器调用特定类型的信息,并且仅更新相关数据而无需重新加载其他未更改的所有内容。作为API的应用程序的一部分:在构建Web应用程序时,从已有的组件构建它们会更快、更容易(通常更可靠)。想象一下,很可能有一个库、预建平台或XaaS来提供它。但是这些组件如何相互通信以作为一个统一的应用程序执行呢?“P”表示协议,“I”表示接口API的应用程序端可能完全不同,但无论我们谈论的是什么上下文,API的最终任务都保持不变:通信和协调。API或协议中的“P”是指确定相互协议的方法,以便其他软件可以联系特定的API以从中请求/接收相关信息。接口是指API的中间方面,充当使两个应用程序能够相互通信的实际功能。所以从根本上说,API就像是两个软件之间的协议或合同。这个“胶层”可以让它们连接起来一起运行。实际上,API表示“如果您给我这个命令,我将执行此操作/返回此信息。”打个比方,API就像小型酿酒厂中的啤酒龙头。每个水龙头对应一种啤酒,所以当你按下标有“Porter”的水龙头把手时,你知道你的杯子里会装满浓郁的麦芽啤酒,而当你按下“Pilsner”时,则是清爽的黄色啤酒会出来的。出于同样的原因,从API请求输出的客户端知道要“点击”哪些数据以获得所需的输出。例如,Porter应该从portertap中出来,而不是从其他tap中出来。同时,用户甚至不必知道或关心水龙头内部发生的情况。您可以重新排列队列或优化产品(您提供的啤酒或应用程序)而不影响用户,因为界面保持不变。API不只是推送数据,它们还接受数据。啤酒的类比在这里是不恰当的,因为啤酒是单向流动的。因此,我们用另一个比喻来说明数据是如何进入API的。想一想小孩子玩的形状分类器玩具。圆形、星形和三角形块通过适当形状的开口插入;星形碎片只能通过星形孔插入。在API中,数据以定义的形式(例如圆形或三角形)提供,并且只能通过相应的开口通过接口。API需要某种格式,拒绝不适合的数据。不要试图将三角形数据放入方孔中。因此,客户端被迫根据API构建器的规范(即协议)组织他们的输入,该规范设置了交易的预期要求。无论我们用什么比喻来解释API,API就像是两个软件之间的协议或合同,上面写着“如果你给我这个指令,以这种格式,我将执行这个指定的动作或返回这个信息”API作为一种产品,不仅可以作为浏览器、服务器、软件和数据库之间交换信息的载体,还可以将API打包成产品进行销售。例如,WeatherUnderground出售对其天气数据API的访问权。这是一组专用URL,可返回纯数据响应(此处为最新天气预报),可用于丰富您自己的应用程序中的数据。您无需获取WeatherUnderground在其自己的应用程序或网站中使用的表示结构,而是构建自己的GUI。话虽如此,您绝对可以使用浏览器向API发出请求并查看返回的数据,无论是否使用GUI。由于所请求数据的实际HTTP传输以文本形式发生,您的浏览器通常能够显示响应。例如,您可以直接从浏览器访问GitHub的API,甚至不需要访问令牌。以下是在浏览器中访问GitHub用户的API路由时得到的JSON响应,看看我的:{"login":"mgienow","id":19556217,"node_id":"MDQ6VXNlcjE5NTU2MjE3","avatar_url":"https://avatars2.githubusercontent.com/u/19556217?v=4","gravatar_id":"","url":"https://api.github.com/users/mgienow",“html_url”:“https://github.com/mgienow”,“followers_url”:“https://api.github.com/users/mgienow/followers”,“following_url”:“https://api.github.com/users/mgienow/following{/other_user}","gists_url":"https://api.github.com/users/mgienow/gists{/gist_id}","starred_url":"https://api.github.com/users/mgienow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mgienow/subscriptions","organizations_url":"https://api.github.com/users/mgienow/orgs","repos_url":"https://api.github.com/users/mgienow/repos","events_url":"https://api.github.com/users/mgienow/events{/privacy}","re??ceived_events_url":"https://api.github.com/users/mgienow/received_events","type":"User","site_admin":false,"name":"MichelleGienow","company":null,"blog":"","location":"Baltimore,MD","email":null,"hireable":true,"bio":"Front-endwebdeveloper&recoveringjournalist-Iwritewebdev/JS/Node/Python@TheNewStack","public_gists":1,"followers":11,"following":2,"created_at":"2016-05-24T16:33:09Z","updated_at":"2018-01-27T03:26:14Z"}所以你来拜访我当我创建一个GitHub页面时,它会调用一个GitHubAPI来获取展示代码(HTML/CSS)来显示该页面,并调用另一个GitHubAPI来获取我独有的数据还有其他几个调用其他API来获取页面其他区域的内容。在浏览器收到所有这些调用后,它知道将数据插入页面,生成最终的统一表示。总而言之,基本上,任何可以与其运行时环境明确分离的软件都可以成为API中的“A”。它本身也可能有某种API。例如,假设您在代码中使用第三方库。一旦库被合并到您的代码中,它就成为整个应用程序的永久部分。然而,作为一个独特的软件,该库使用一个API(不用担心,API是预先打包的)以便与您的其余代码进行交互。因此,API可以是服务器、应用程序,甚至是买卖的产品。这就是API很难解释的原因,即使对于每天接触它们的人来说也是如此。也许定义API本质的最合适方法是使用乐高积木。块为所有块以相同的方式组合在一起提供了一种简单且结构化的方式。同时,方块的可能组合是无穷无尽的。同样,软件可以使用API将我们寻找的信息与我们查看信息的界面联系起来,创建独特的服务组合,共同构成一个应用程序。乐高积木确实可以帮助开发人员了解API的价值。使用API,开发人员不必在每次编写新程序时都从头开始。他们不再需要构建一个试图做所有事情的核心应用程序。相反,他们可以使用已经创建的组件来分包某些职责,以更好地完成工作。因此,API是软件开发世界的乐高积木:标准化工具可以让软件轻松连接其他软件,从而加快构建和部署,并减少每个人的加载时间。原标题:Tutorial:APIsExplained,UsingBeerandLegos,作者:MichelleGienow