一个用于 Python 的 CMIS API 库,第 1 部分: cmislib 简介
2010-05-04 00:00:00 来源:WEB开发网我从一开始就建立起构建流程、文档和源代码控制。尽早建立这些内容很重要,这样其他开发人员才能快速加入项目并进入角色。
代码以迭代方式演变。每次迭代都首先为新功能编写单元测试,然后是实际编码,最后是通过单元测试。我从一些基础功能开始,比如查询存储库以了解它的功能,检索对象和对象属性来验证常规方法。然后,我以此为基础继续进行,开始全面编写操作、签出/签入、关系和 ACLs。
一开始测试很困难,因为不存在参考实现(那时 Apache Chemistry 的参考实现中的 AtomPub 绑定是只读的)且供应商还在开发他们的实现。Alfresco 是 CMIS 的一个早期采用者,当时拥有最成熟的实现,因此我从那里开始。当大多数单元测试都针对 Alfresco 顺利完成后,我就开始针对已经公开发布 CMIS 实现的其他供应商进行测试。IBM 慷慨地主动公开他们的实现。添加这个实现使我大开眼界,但这对于 cmislib 和所有相关供应商都是一个极好的练习。我们在客户端和服务器端都发现了一些问题,如果没有这种互操作性测试,我们不可能那么快地发现问题。
如果您正在开发 cmislib 这样的 CMIS 工具或 APIs,重要的是要针对尽可能多的不同服务器进行测试。CMIS 规范是全新的且供应商实现还不够成熟,即使那些宣称完全遵守规范草案的供应商实现也是如此。已发现的常见问题分为以下三类:
不完整的实现。CMIS 还非常新,发现以下情况很正常:缺失的服务(ACL、关系、策略以及当时似乎最不支持的更改日志),还没有收到支持的强制特性(例如,没有提供的强制集合和链接),以及硬编码的值。
对规范的不同解释。CMIS 规范是一个编写良好、容易阅读的文档,但有些内容仍然需要解释。例如,在草案 6 之前,checkedout 集合的内容比较模糊。该集合包含的是签出对象的 Private Working Copies (PWCs) 还是签出对象本身?不同的供应商对这一点的解释都不同,并根据它们的解释来实现。那个特定问题已经解决(PWCs 是正确答案,如果您感到好奇的话),但您可以从中看出那可能会使编写一个互操作的客户端出现困难。
更多精彩
赞助商链接