如何在Perl模块中管理不同的API版本?

问题描述:

有一个DataTables CPAN module。它适用于datatables版本1.6。与此同时,有数据表1.10,具有不同的接口。很多事情都改变了,例如选项名称。如何在Perl模块中管理不同的API版本?

我想知道:模块如何扩展以涵盖旧的东西以及新的datatables 1.10接口? 这个问题有一个共同的名字吗? 是否有最佳做法? 有没有一个很好的参考模块,我可以看看?我认为其他人也面临挑战。

+3

另请参见[JQuery :: DataTables :: Request](https://metacpan.org/pod/JQuery::DataTables::Request):“*此模块仅提供与v1.10参数对应的API但将v1.9参数映射到相应的v1.10参数。*“ –

+0

这两个模块具有完全不同的接口。 DataTables假定CGI并自行完成所有的解析,而JQuery :: DataTables :: Request实际上需要你传入参数。我认为后者是更好,更抽象的实现。你应该可以使用它。同时,向他们提出pull请求(https://github.com/srchulo/DataTables和https://github.com/xmikew/p5-JQuery-DataTables-Request)以添加链接可能是有意义的彼此之间,所以未来的用户会看到有两个API版本的实现。 – simbabque

从我自己的作者的观点来看,最好的做法是

  1. 保持最新主与最新的API。
  2. 使用主要版本的API保留次要版本的模块。
  3. 向模块用户推荐

    3.1。与模块一起升级API,或者

    3.2。保持其模块的小版本不受版本要求的限制(我使用cpanfile或cartonfile)。

可能您需要更具体的答案吗?

+0

很高兴得到关于该主题的一些反馈。不过,我对如何真正做到这一点感兴趣,以允许使用不同的API版本。您的建议意味着每个模块仅支持1个api版本。 – capfan

+0

每个模块的次要版本都有一个API版本,因为您可以控制双方。 模块用户允许安装所需的API服务器,并安装/需要API对应的最新补丁版本的API客户端。 在一个模块中支持多个API版本是模块用户不拥有API服务器端时应该完成的另一项任务。 –

+0

我想我理解你的答案,但这不是我正在寻找的。我不是js DataTables库的所有者。另外,我认为必须安装特定的过时(而不是最新)版本的模块才能使标准行为不常见。我个人不会考虑普通最终用户的这种行为。 – capfan