通过销售农场产品来解释 Web API
如果你去过农贸市场或农产品摊位,那么你就能理解应用程序编程接口(API)的概念。
如果你是网页开发新手,你可能经常会听到“API”这个词。
“我迫不及待地想看到那家公司发布他们的公共API!”
“那家公司的API简直一团糟。”
“他们的 API 中是否有用于获取该数据的接口?”
如果你不熟悉 SOAP、HTTP 和 XML 等概念,理解应用程序编程接口 (API) 的概念可能会相当困难。
所以,我想找到一种方法来解释 Web API 的整体工作原理,这样,当你深入了解具体的技术细节时,你就能明白它们是如何组合在一起的。
在本教程中,您将扮演一个农场的主人,该农场出售五种产品:鸡肉、猪肉、鸡蛋、西红柿和玉米。
要理解本教程,您只需了解服务器端代码(后端)和客户端代码(前端)之间的区别。如果您还不熟悉服务器端和客户端的概念,可以先阅读我的GET/POST 指南的开头部分。
GUI 和 API 的区别
我们先从一个常见的上网方式说起。网络浏览器,比如 Chrome,就是一个图形用户界面 (GUI) 的例子。作为用户,你可以与这个用户友好的工具进行交互,从而完成诸如预订机票或在 Google 上搜索等任务。
图形用户界面允许网站访问者以可控和结构化的方式与服务器上的代码进行交互。
对于农场主来说,这有点像你在自己的土地上设立的农产品摊位,或者你在农贸市场上的摊位。
你不能只是把货物堆放在谷仓里,让顾客进来就指望赚钱。相反,你需要搭建一个摊位,让顾客能够快速了解你提供的商品和价格。
这就是顾客与你的辛勤劳动“互动”的方式。他们无需了解种植过程、你使用的设备或加工流程,他们只需看到最终产品。
注意每位顾客都能获得一对一的互动。当他们来到你的摊位时,他们只会关注你农场的产品。
那么,什么是API?
除了直接面向消费者销售产品外,还有其他销售渠道。您还可以将产品销售给分销商和当地餐馆,让他们将您的产品添加到不同的菜肴中,或者在杂货店出售。
这是消费者“体验”您产品的一种全新方式。当然,他们在当地餐馆点早餐时,可能不知道煎蛋卷里用的是谁的鸡蛋,但他们仍然是在“使用”您的产品。
但是,从农场主的角度来看,您的销售流程和供应链则截然不同。您无需精心布置面向消费者的摊位,而是需要在谷仓旁增设装卸区,方便分销商和餐馆的卡车前来装货。此外,您还需要对产品进行包装,以便进行大宗销售。
这与API的概念类似。当你构建API时,你就允许其他开发者访问你的数据并在他们的应用程序中使用这些数据。
就像餐厅顾客可以通过吃煎蛋卷来“体验”你家的鸡蛋一样,网站用户也可以通过网站上的小部件或对方公司服务器上的代码,在别人的网站上“体验”你的产品。
现在,我们拥有了全新的互动方式。您的分销商和餐厅客户可以通过亲自到访农场与您进行一对一的交流,但随后他们在销售产品时,也会将您的产品推广给成千上万的顾客。
作为农场主,您仍然需要建立相应的流程,才能成功地为这些分销商提供服务。同样,API 提供了一种结构化的方式,让其他人可以使用您的服务器端代码。作为开发者,您仍然拥有完全的控制权。
我在上图中以搜索组件为例,但实际上,几乎任何东西都可以用来访问 API。这只是网站用户使用第三方 API 的常见方式之一。其他常见方式包括:
- 地图工具
- 支付处理
- 天气数据
可以通过 API 访问哪些内容?
假设你想开始从自家农场向分销商和餐馆出售鸡蛋。你需要在农场建立一系列流程来支持这项工作:
- 鸡蛋的大量储存
- 每月向客户开具账单的会计核算
- 装运区,用于将鸡蛋装上卡车。
在建立所有这些流程之前,首先需要确定您是否已准备好接受大批量鸡蛋订单。您是否有足够的母鸡来保证每周产蛋量?如果不够,您的系统可能会承受过大的压力,并且在鸡蛋断货时会让客户失望。
API开发者会设置接口,允许其他开发者访问其数据库中的特定数据。上面的例子就是一个“鸡蛋”接口。如果你一开始就没有创建这样的接口,那么顾客就无法从你这里购买鸡蛋。
您可以为农场生产的每种产品(例如鸡肉、猪肉、鸡蛋、西红柿和玉米)设置特定的销售点。有些产品可能只能通过农贸市场(图形用户界面)购买,因为您不确定是否已准备好扩大产量以满足分销商的需求。
这就是API和开源数据库之间的区别之一。在开源数据库中,所有数据都可以查询和访问。而当你为后端设置API时,你创建的端点只会公开特定的数据。
就像分销商现在可以与您的农场互动一样,其他公司的开发人员也可以与您的 API 互动。一旦他们编写了访问您服务器数据的代码,他们的网站访问者就可以根据您的数据获得全新的体验。
跟踪单个 API 调用
假设你决定在你的农场设立一个鸡蛋销售点。当地一家餐馆想要购买 1000 个鸡蛋,以满足其每周收到的 1000 份煎蛋卷订单。
注意一下,我们的API 调用实际上是从用户请求开始的吗?这与描述可能有点违反直觉。
当某些触发条件满足时,就会发生一次单独的API 调用。此时,其他开发者编写的代码会向您 API 的特定端点发送请求。您的 API 必须根据您的服务器端代码返回响应。
在这种情况下,触发因素是订购1000枚鸡蛋。餐厅经理已经与一家农场——也就是你们的农场——建立了合作关系。而且,你们的农场也已经建立了一次性交付1000枚鸡蛋的流程。
所以,1000 个鸡蛋的订单来了,你的农场交付了:1000 个鸡蛋。
请记住,可能有多达 100 家餐厅与您的农场建立了合作关系,其中 10 家可能同时发出请求!这就涉及到可扩展性的问题了。您需要确定您的服务器是否能够处理这样的需求。但这又是另一个教程的主题了!
以下是上述序列的技术版本,假设您有一个可以在其他网站(例如 Google 地图)上使用的地图应用程序。
- 其他网站上的某个用户使用您的地图应用程序,并执行需要从您的服务器获取数据的操作。
- 另一个网站上的开发者已经编写了代码,可以根据该用户的操作向您的 API发送请求。
- API调用到达,您的服务器返回响应。
当然,可能还有 1000 个其他 Web 应用程序正在使用您的地图小部件,因此您需要做好应对所有这些 API 调用的准备!
GET 和 POST 示例
如果您需要复习一下GET 和 POST 的相关知识,这里有一个简要的回顾。
到目前为止,在我们展示的农场示例中,场景中的请求都类似于 GET 请求。由于餐厅顾客的请求,餐厅必须派卡车到你的农场取鸡蛋。
但是 POST 请求呢?举个实际例子,Facebook API 允许其他应用的用户创建帖子,然后该应用可以将这些帖子直接发送到 Facebook,使其立即发布。
在某些情况下,例如社交媒体 API,允许最终用户通过第三方应用程序直接发布到社交平台可能是有意义的。
但这里还有另一个例子。亚马逊API允许在线商店店主通过编程方式将产品发布到亚马逊市场。在这种情况下,独立在线商店店主团队中的开发人员也可以在亚马逊上建立品牌形象。因此,该API不涉及任何最终用户或网站访问者。
以我们的农场为例,这有点像你处理每月账单的方式。餐馆和分销商整个月都会来你的农场采购产品,月底你会给他们寄一份账单,详细列出他们应该支付的款项。
就像餐厅必须建立自己的流程来确保在合适的时间收集鸡蛋一样,他们也必须有一套流程来按时支付你的款项。这很可能涉及到他们的会计。假设会计知道他们必须在每月1号支付你的款项。
那么,用户/顾客如何触发 POST 请求呢?想象一下,每当有人点餐,而这些食物的原料来自你的农场时,餐厅都会立即向你付款。例如,如果有人点了一份 5 美元的煎蛋卷,其中 2 美元来自你农场的鸡蛋,餐厅就会立即将这 2 美元汇入你的银行账户。如果这是一个 Web 应用,这种通信方式或许可行,但由于这是一个农业案例,这种做法就显得不太实际了。
农场和网络应用程序的区别
正如你在最后一个例子中看到的,我们的小型农场供应链和 API 调用之间存在一个主要区别:时间。
仅仅因为现实世界的物流限制……即使步骤大致相同,我们也无法指望达到大多数 API 调用的瞬时性。
让我们来看一下教程前面提到的 GET 请求示例。
在Web开发领域,这意味着什么呢?
- 用户执行的操作会触发请求。
- 服务器端代码向端点发出 API 调用。
- API提供特定信息
但如果我们把这个比喻应用到现实世界的农场中:
- 用户点了一份煎蛋卷
- 餐厅派卡车到你农场取鸡蛋。
- 鸡蛋送到餐厅后,用于制作煎蛋卷。
派卡车去农场做一份世上最新鲜的煎蛋卷,这显然是不切实际的。但是,步骤仍然相同。所以我只是想提一下时间上的差异。
但是,当用户在使用网络应用程序时触发请求,他们通常会立即得到响应。
“开放API”意味着什么?
那么让我们回到最初的问题:一家公司“开放其 API”意味着什么?
这意味着他们服务器上存储着大量有价值的数据,现在可以通过特定的接口公开这些数据。该公司可以决定其他公司的开发人员如何访问这些数据,但与此同时,他们也以结构化的方式将这些数据广泛公开。
用农场来类比,这就好比你的农场决定将产品卖给分销商和餐馆,并建立内部系统来处理大宗订单。
喜欢这篇教程吗?
如果你喜欢这篇教程,你可能也会喜欢我其他关于 Web 开发主题的可视化指南。请继续阅读CodeAnalogies 博客上的文章。或者,在评论区告诉我你的想法!
文章来源:https://dev.to/kbk0125/web-apis-explained-by- sell-goods-from-your-farm--pd9