基本上,我在脑中辩论API和协议是如何不同的。经过思考,我得出了我的新结论:我相信它们几乎是一样的,只不过协议更像是一个被广泛接受和使用的API。例如,API和协议都定义了两个或多个组件协同工作的标准和规范。API定义了特定程序的标准。一个协议,比如SSH,是一个程序本身,有它自己的规范。另一个需要考虑的问题是,协议只是一组规范。伙计们有什么想法吗?抱歉,如果我听起来无知的话。
发布于 2016-11-25 11:06:31
不是的。协议不是应用程序。
协议是系统或系统组件之间相互通信、交换信息、从错误中恢复、建立语义的一组规则。
协议可以通过硬件、软件、人员或其中任何一个的组合来实现。
通常,指定的行为独立于任何特定的实现。
另一方面,一个应用程序是一个计算机程序,一个软件。
例如SSH这样的协议本身就是一个程序。
实际上,该应用程序是根据协议调用的。同名的两件事不一定是一回事。您可以编写一个实现SSH协议并称之为"Buba“的应用程序。应用程序不是协议,反之亦然。不同版本的Unix和或Linux可以有不同的ssh实用程序实现,但它们都调用程序SSH。
许多应用程序实现了XMPP协议,并且没有以该协议命名。
此外,如果还没有人实现协议,则协议可能只存在于文档或已发表(或未发表)的论文上。但它仍然是一项协议。即使没有软件应用程序、系统或API实现它。当协议被广泛接受(并被广泛实现)时,它可以成为一个标准(或者不是)。
发布于 2016-11-25 14:27:57
所有的API都是协议,但不是所有的协议都是API。例如,键盘和主板之间的连接是由一个或多个协议(PS/2、USB、蓝牙等)控制的,但我们肯定不会称它为API。API是一种特殊的协议形式,它允许两个应用程序、子系统等(或同一应用程序的两个副本)相互通信和相互控制。
当我们开始讨论库(如OpenGL、Win32、.Net等)时,API也是我们所指的。用任何语言编写的源代码调用API端点,API端点反过来调用库,并最终调用操作系统或特定的硬件。API将文字机器或网络解释从开发人员身边抽象出来,这样他们就可以专注于实现应用程序,而不是担心这个特性是如何在较低级别上实现的。从这个意义上说,API是一种抽象形式。
例如,许多企业应用程序的SOAP允许开发人员将API导入到他们选择的开发环境中,以便以指定的方式进行通信。一旦实现,客户端软件就可以与服务器对话,并使其以服务器规定的方法插入数据、更新数据、检索数据、删除数据等等。
有时,协议和应用程序被巧合地命名为相同的东西,通常是为了方便,或者因为它是同类中的第一个。在您的示例中,SSH应用程序使用SSH协议与基于文本的终端进行通信。但是,Git还允许将SSH协议用作与上游存储库的通信形式,但Git并不称为SSH。
但是,区别在于:Git对SSH协议的使用构成了一个API,而SSH应用程序对SSH协议的使用只是一个通向服务器的隧道,而不是一个API。Git命令,如"push“、"pull”、"merge“等,通过SSH协议进行通信,但使用Git。通过SSH操作服务器需要由shell解释的附加命令,其中shell充当API,SSH充当协议。
https://softwareengineering.stackexchange.com/questions/336858
复制