在我对企业的调查中,担心供应商锁定的数字徘徊在30年左右90%。当您要求企业避免它时,它们会响应“标准界面”或“开源”。Even today, the percentage who include “managing APIs” in their list of lock-in avoidance measures is in the statistical noise level, but APIs are perhaps the fastest-growing lock-in problem today, and they’re surely going to become a major problem in the future.
API代表“应用程序编程接口”,但是该术语在今天广泛用于软件,以描述应用程序,云甚至网络中使用的所有软件组件之间的接口。API让软件互相交谈,并且它们在每个情况下都是必不可少的软件组件而非硬件设备。今天在API中锁定的挑战是一个事实,即网络正在向软件转移到软件,这意味着它正在转换到API与那些标准接口一样重要的模型,而企业则不跟踪该重要转变。
在网络设备内,您可以期待找到四层软件。在底部,有司机这提供了一种将像以太网接口芯片相同的东西链接到软件的其余部分的一般方式。以上,有一个网络操作系统(NOS),它提供普通托管能力,并且上面是处理所需特定网络功能的“中间件”。最重要的是网络相关的应用程序,包括管理和服务功能,如统一通信或拒绝服务的缓解。这些层中的每一个都将API暴露给其他层。
We’re used to different hardware interfaces, Ethernet or passive optical networking or even wireless, and everyone understands that you can’t plug a goes-into into the wrong goes-out-of any more than you can plug an Ethernet cable into a USB port. What makes APIs different is that there’s no physical connector to stop you from trying. An API represents a message exchange specification. Every aspect of message format, data structure, request/response synchronization, and so forth, are set forth in API specifications, and they all have to match or the software using the API won’t communicate correctly. In other words, mismatched APIs break software, including the software inside devices and network management centers.
供应商知道这一点,许多(特别是在网络管理空间中)许可证他们的API。这意味着企业只能根据许可条款使用API。即使您开发适配器软件要执行此操作,可能无法将软件从另一个供应商附加到许可API。如果将软件构建到许可API并稍后更改软件,则可能会丢失使用API的权利。我在金融服务公司中看到了这个特殊的问题,并将其几个月才能通过这个问题。
即使当供应商没有专门用于锁定您的API时,API也可以创建意外锁定。还记得这四个软件层吗?它可能每层都使用NOS API。大多数NOSS将使用驱动器API,中间件可能会使用NOS API和其他中间件包的API。所有这些都会创建一个互连的网络,对吧?现在假设您的NOS供应商更改其API。您的主中间件供应商拾取更改并支持它,但其他中间件提供商中的一个或多个都没有。如果安装新的NOS,您将打破不支持API更改的所有中间件。如果您没有,您将丢失新的NOS功能以及支持新NOS API的单个中间件提供商的任何新功能。
即使是开源软件也有一个API问题。大多数开源许可证都不禁止自定义,他们只要求提供源代码。开源No或中间件或网络管理软件工具的供应商可以自定义一些API,从源代码发布,并与开源许可术语兼容。但是其他软件仍然期望该软件的标准API,不再与之合作。
我已经看到了Linux的这个问题,它有许多分布包括Linux和各种中间件组件。例如,您可能有一个应用程序在Linux上运行,例如使用Python。发行版“A”可能包括一个版本的Python,并且发行版“B”可能包括另一个版本。如果您获取使用Python的应用程序/工具,并且如果版本之间的Python API更改,则可能无法编写可以在多个发行版中移植的软件。
您将硬件连接到物理接口。您将软件连接到API。如果在网络运营级别和分组设备中的网络,则通过组合软件包将软件与硬件和构建功能分开,然后您需要在您对物理接口时尽可能多地关注API,所以甚至更多。
如何?
第一步是要求所有软件产品都包括他们暴露和消耗的所有API的完整描述。该描述必须包括对他们声称支持的任何标准的引用,以及对任何增强功能或扩展的完整描述。它还必须包含与每个API相关的许可术语(如果有的话),您应该询问使用API的示例代码确认它是如何工作的。Obviously, if you plan to connect Package A and Package B via an API, their API descriptions have to match fully, or you have to be able to avoid situations (like specific features or commands) that would invoke an extension that both packages don’t support.
第二步是在进行任何API更改时获取软件上的版本历史。您正在寻找的是如何在多个软件包中渗滤的时间表。如果包A的供应商在支持新的API方面非常快,并且竞争包装A的提供者很慢,那么如果进行API更改,则可以期待出现问题,并且选择慢响应供应商。在使用API的所有供应商处于同一页面上,您可能无法更新您的软件而不会破坏一些API连接。
最后一步是合同为您的假设。即使是最佳研究也会错过策略或方向的变化,如果软件供应商更改API,则结果可能会破坏应用程序或网络。获得书面书记的承诺。
网络设备或应用程序是“黑匣子”的经典定义的示例,该对象是不透明的,因此无法详细检查其结构。黑色框定义,所以俗话说,通过他们的输入和输出之间的关系。软件真的由那些API之间的关系定义,人们不会尽可能地关注他们应该的关注。如果您想避免供应商锁定,故意或偶然,那么您需要认真地拍摄API。