我对API有什么不了解?

时间:2014-05-26 14:14:48

标签: language-agnostic terminology

维基百科定义:

在计算机编程中,应用程序编程接口(API)指定某些软件组件应如何相互交互。

我看到有些人认为图书馆的api就像文档一样。就像在api.jquery.com上一样,它们展示了如何使用jquery库。我也看到人们将api定义为库的可见部分

我了解web api的工作原理:您可以使用JSON或XML与Web应用程序进行交互的界面,例如: youtube api。所以我可以获得有关YouTube视频或播放列表的信息。

我读过有不同类型的api。 Web api,图书馆api,OS api等。

以下是一些例子,我希望能够清除我的困惑。


示例1

如果我在C ++中包含一个库,那么头文件将是API?像Win32 / Winapi这样的api怎么样?为什么这被称为api而不是库?不要将它包含在我的源代码中并开始使用它吗?

示例2

如果我想在C#中使用库,我可以将.DLL添加到我的bin文件夹中,并告诉编译器我要使用该库(即使用System.Web)。 api是否只是在库中编写的类中的所有公共成员(因此是可见部分)?

示例3

让我们说公司 X 写了一个MMORPG游戏,但他们没有网站api。我想创建一个Windows应用程序,我希望能够在我的应用程序中查看任何角色。我如何与游戏沟通以获取此数据? api在哪里写的?我怎么看?


操作系统有什么样的api?我怎么能用它?有什么例子吗?

2 个答案:

答案 0 :(得分:2)

API是服务提供商与服务使用者之间的合同(您的程序)。就是这个。它是如何完成的,它是特定于实现的。

合同以提供者同意的方式“如果您使用参数Y调用函数X,我保证结果将为Z.”。但是客户也同意“使用类型T的参数调用函数X”而不是任何废话。

Ad1:您的代码是一个库。它可以实现许多隐藏的功能,例如void Nuke_hidden(double lat, double lon);可以攻击世界上的任何地方。但您可以选择不公开此方法。相反,请使用enum参数限制为New York, London, Moscow的其他参数。

现在你的代码如何处理你的库的主体。您允许您的消费者使用它的内容是您的API的一部分。你的合同特别允许轰炸这3个城市,禁止轰炸任何其他地方。

Ad2:你明白了。准确。

Ad3:如果有人不公开和记录API,通常是因为他们不希望你编写这样的程序:)。但是,它们必须具有某种API(即使它们从未调用过它),客户端使用它来与服务器通信。

答案 1 :(得分:2)

API只是一个如何与软件组件交互的定义。例如,ebay的API可以包含用于创建拍卖的函数调用和用于检索拍卖的所有出价的函数调用。

API既不是软件,也不是文档,也不是DLL。 API是如何与一个软件“对话”的抽象定义。如何实现取决于提供API的开发人员。

当然,要告诉其他程序员如何使用您的软件,您需要提供API的文档。那是:有哪些电话可用?他们需要和接受哪些参数?

因此,关于示例1)头文件将定义如何使用C ++来使用API​​。就像Windows一样。 Windows有一个API(即:应用程序可用于创建窗口,文本框等的接口)。头文件定义了如何在C ++中使用它。

关于示例2).NET DLL是一种软件与托管代码中的API交互的方式。你可以说C#中的每个类都定义了一个API,因为它有公共成员。

关于示例3)并非每个软件都能访问其内部的其他软件。例如:Word确实有一个可用于创建加载项的API。其他软件不提供此类API。