我正在尝试了解第三方软件中采用的设计策略。具体来说,我正在分析一种情况,其中软件堆栈的“IMPLMENTATION_LAYER”(例如)中的代码实现某些功能(通过 C 例程)并将这些例程的签名作为 API 公开给 <强>“应用层”其使用。这是通过以下方式完成的
应用层提供以下结构
struct my_interfaces
{
/*List of function pointers*/
};
以及基于宏的函数列表,用于初始化此结构(使用合适的函数)并访问此结构的方法。
问题
与传统方法相比,以这种方式公开 API 的优点是什么。我所说的传统方法是指仅公开函数原型(prototype)。
最佳答案
- 最少 API 导出:您无需导出整个库;只是一个“GetAPI”API。
- 版本化 API:API 加载器可以得知正在请求哪个“版本”的 API,从而公开特定于特定版本请求的功能和行为
- 模块化 APIS:API 加载器可以动态加载其他模块,并即时从这些 .so/.dll 文件连接请求的 APIS。
- 集中许可:单个 API 加载器从根本上减少了需要执行许可代码检查的位置数量。
- 模式切换:根据请求的 API,可以加载或不加载不同的功能。换句话说,部分 API 人口。一个很好的例子就是进入 FIPS 模式的加密库,其中只有合格算法的特定子集可以访问,而所有其他的都被 stub 为错误条件。
这些只是我脑海中的一些
关于c - 公开 API 时的设计方面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13510779/