我正在开发一对库,以便与REST API配合使用。因为我需要在非常不同的环境中使用API,所以我目前计划有一个版本是用PHP编写的(用于Web应用程序),另一个版本是用Python编写的(用于桌面应用程序和长时间运行的进程)。在开发库时,有没有最佳实践可以遵循,以帮助保持自己的理智?
'做自己的客户':我发现先编写测试的技术是确保API易于使用的绝佳方法。先编写测试意味着你将像API的‘消费者’一样思考,而不仅仅是一个实现者。
尝试编写通用的单元测试套件,可以通过在一种语言中封装一个类来从另一种语言中调用它。如果无法实现,请确保两个版本的测试是等效的。
为什么不也用Python开发Web应用呢?有很多框架可供选择,包括Django、Web2py(类似Django但更简单易用)、TurboGears、web.py和Pylons。
而在桥接方面,你可以使用进程间通信来实现PHP和Python应用程序(以守护进程模式运行)之间的交互。
显然,保持命名一致是很重要的。在两个不同的实现中,函数和类应该命名相似(如果不是完全相同)。当你用两种不同的语言分别实现一个API时,这通常会自然而然地发生。但是,在我看来,最重要的是遵循特定语言的习惯用法。例如,假设我要在我比较熟悉的Ruby和Scala两种语言中实现一个REST API。Ruby版本可能会有一个叫MyCompany::Foo
的类,其中包含方法bar_baz()
。相反,同样的API的Scala版本将具有一个名为com.mycompany.rest.Foo
的类,其中包含一个方法barBaz()
。这只是命名约定,但我发现它可以很好地帮助API在某种程度上“适应”特定语言,即使它的设计是在其他地方创建的。
除此之外,我只有一个建议:文档、文档、文档。这是保持理智的最好方式,尤其是当你处理多种实现的API规范时。