javascript - 了解 API 转换和内部 API

标签 javascript json api rest

我正在尝试了解 API。

问题1: 我知道它有助于两个应用程序相互通信。因此,如果我要在应用程序中使用第三方服务,我可以使用他们的 API 来实现。明白了。但为什么我们在同一家公司内需要 API 呢?如果假设 XYZ 公司有一个 java/js 应用程序,并且他们使用公司内部 API 获取数据。当资源在同一家公司内时,拥有 API 有何意义? 另外,这应该是 REST 还是 SOAP?

问题2: 假设我有用户使用我的 API“x1”,该 API 具有底层数据库“d1”,该数据库具有模式“s1”。现在,我已将底层数据库和架构完全更改为“d2”和“s2”,并拥有新的 API“x2”。用户如何在不知道此转换的情况下仍然继续使用我的 API?如何在用户不知情的情况下透明地完成转换?

问题3:

“其余部分可以缓存”到底是什么意思?有什么例子吗? API 只有两种类型?休息和肥皂对吗?

有人问了我这些问题,我完全搞砸了。有人可以解释并消除我的困惑吗?

最佳答案

最简单的说,API 是一组用于完成特定任务的可重用函数。因此,如果您使用标准 fopen 函数编写 C 程序,那么您正在使用 POSIX API,它定义了该函数的行为方式。至关重要的是,您的程序不需要知道函数是如何实现的,因为 API 是在不同系统上执行相同任务的抽象。具体的实现将由每个目标系统上的库提供。

这种直接 API 仅在您使用同一台计算机时才有效,并且您的程序和库是用可以轻松绑定(bind)在一起的语言编写的。在某些情况下,您需要将更多不同的资源绑定(bind)在一起,因此需要不同类型的 API。例如,您可以为您的库编写一个脚本友好的命令行界面(基于文本的 API),或者使用信号和管道在两个正在运行的进程之间进行通信(称为 IPC,用于进程间通信)。

这给我们带来了网络 API,特别是 Web API,这是您问题的主要主题。这些与上面的相同,但它们使用 HTTP 和相关技术来让进程相互通信,即使它们不在同一主机上。正如您所说,这允许组织拥有公共(public) API,但它也允许使用多种编程语言和技术将系统扩展到多个服务器上。抽象的概念意味着作为 API 服务提供的系统的一部分理论上可以完全被新的实现所取代,而无需对使用它的程序进行任何更改。如果需要重新设计,可以提供一个看起来像旧 API 的包装器,并调用新 API,根据需要转换数据。

构建 Web API 的方法有很多,但它们大致分为两类:

  • RPC(远程过程调用)API 基于操作或动词,具有定义的参数、效果和返回值;就像您在远程主机上调用函数或过程一样。 SOAP 是 RPC 风格 API 的特殊标准,它使用 XML 定义了一个“信封”;不过,它在信封内并没有定义太多内容。
  • 面向资源的 API 侧重于名词而不是动词,并且不旨在类似于经典的函数调用。您可以将 RSS 提要视为此类简单的 API - 访问提要的 URL 会导致服务器生成资源,并以明确定义的格式呈现该资源以供其他程序使用。 REST 是这个想法的形式化,使用 URL 来表示对象,使用 HTTP 请求来表示对这些对象的操作 - GET 来检索、POST 来创建、PUT 来更新等。通过使用 HTTP,这个想法是利用现有的用于人类可读资源的技术,例如缓存响应,而用户不需要知道 API 是如何编写的。

由于这些 API 应该是语言中立的,因此有必要定义数据的表示方式;最常见的格式是 XML 和 JSON,但也可以有其他格式,例如 Google 的 Protocol Buffers。

关于javascript - 了解 API 转换和内部 API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29424973/

相关文章:

javascript - 使用 jQuery 将 img 元素复制到另一个 div

javascript - 使用 jquery 和 css 图像全屏

javascript - 重定向到从 json 响应中获取的 url

c# - 在 JsonSerializerSettings 中将 null 更改为空

javascript - 来自提交外部交易的 Cardano 钱包格式错误的 tx 负载

angular - 使用 angular web 应用程序调用 mongo/golang db 时被 CORS 策略错误阻止

javascript - 从 html 输入中删除 size 属性

JavaScript - 去除重复算法效率

ruby - 将 ruby​​ 哈希值转换为有效且人类可读的 JSON

python - 如何在 cron 作业中进行 flask API 调用时关闭数据库连接?