我正在围绕REST Web服务编写一个Perl包装器模块,我希望能就如何最好地构建模块提供一些建议。
我一直在寻找几种不同的Perl模块以获得灵感。
Flickr::Simple2
基本上是一个大文件,其方法包含Flickr API中的不同方法,例如: getPhotos()
等。
Flickr::API
是另一个用于发出HTTP请求的模块(LWP)的子类。因此,基本上它只允许您使用LWP通过模块进行调用,该模块转到正确的API方法/ URL,而无需自己定义任何包装器方法。这解释得很差 - 但基本上它有一个方法,它接受一个参数(一个API方法名称)并构造正确的API调用,例如request()
/ response()
。
另一种设计方式与首次描述的方式类似,但不那么单一,而且API的单独“区域”具有单独的类。
我想遵循现代/最佳实践Perl方法,所以我使用Dist::Zilla
来构建模块,Moose
用于OO的东西,但我很欣赏一些如何实际的输入设计/建筑师我的包装。
指南/教程或指向其他精心设计的模块的指南将不胜感激。
干杯
答案 0 :(得分:8)
Joshua Bloch对“How to Design a Good API and Why it Matters”有很好的提示(视频,2007)。
答案 1 :(得分:6)
这在某种程度上取决于您尝试包装的API的广度/深度。
如果只有一些简单的API调用,第一种方法就可以了。
如果它有非常复杂的API,你希望向用户公开“简单”模式,一种模式是将主模块和子类化为Main :: Module :: Simple,它将包围主底层模块
正如您所指出的,一个非常广泛的API可能会受益于被分成具有并行类(可能继承自或使用基类)负责包装每个区域的区域。只需确保将所有常见内容都考虑在内,以便对任何代码/设计重复进行操作。