我正在尝试了解 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/