开发一致的库,有哪些最佳实践?

3

我正在开发一对库,以便与REST API配合使用。因为我需要在非常不同的环境中使用API,所以我目前计划有一个版本是用PHP编写的(用于Web应用程序),另一个版本是用Python编写的(用于桌面应用程序和长时间运行的进程)。在开发库时,有没有最佳实践可以遵循,以帮助保持自己的理智?

6个回答

6
因此,使用不同语言开发并行库的问题在于,不同语言经常会对相同任务有不同的习惯用语。我从个人经验中了解到这一点,曾将一个库从Python移植到PHP。习惯用语不仅仅是命名:例如,Python具有大量魔法,您可以使用getter和setter使对象属性表现得神奇;Python具有monkeypatching;Python具有命名参数。
在移植过程中,您需要选择一个“基础”语言,然后尝试在其他语言中模仿所有习惯用语(这并不容易);对于并行开发,不要做太过复杂的事情,以满足最低公共分母为宜。然后再添加语法糖。

2

'做自己的客户':我发现先编写测试的技术是确保API易于使用的绝佳方法。先编写测试意味着你将像API的‘消费者’一样思考,而不仅仅是一个实现者。


2

尝试编写通用的单元测试套件,可以通过在一种语言中封装一个类来从另一种语言中调用它。如果无法实现,请确保两个版本的测试是等效的。


0
据我所知,有许多桥接工具可以连接脚本语言。比如说JRuby,它是Ruby + Java的组合,然后还有可以将Ruby嵌入到Python中(或者反过来)。还有一些像Etoile这样的例子,它们的基础是Objective-C,但也可以桥接到Python和Smalltalk等其他语言。另一个广泛使用的方法是包装C库,例如libxml2、libcurl等等。也许这可以作为基础。假设你为Python编写了所有内容,但实现了与PHP的桥接。这样就不需要进行太多并行开发。
或许把这些东西基于.NET平台不是个坏主意,因为这样你就能使用整个.NET平台上的众多语言。

0

为什么不也用Python开发Web应用呢?有很多框架可供选择,包括Django、Web2py(类似Django但更简单易用)、TurboGears、web.py和Pylons。

而在桥接方面,你可以使用进程间通信来实现PHP和Python应用程序(以守护进程模式运行)之间的交互。


在我们的情况下,这是因为我们有一个现有的 PHP 工具套件需要移植。 - acrosman
你是对的。我理解了。 - Evgeny

0

显然,保持命名一致是很重要的。在两个不同的实现中,函数和类应该命名相似(如果不是完全相同)。当你用两种不同的语言分别实现一个API时,这通常会自然而然地发生。但是,在我看来,最重要的是遵循特定语言的习惯用法。例如,假设我要在我比较熟悉的Ruby和Scala两种语言中实现一个REST API。Ruby版本可能会有一个叫MyCompany::Foo的类,其中包含方法bar_baz()。相反,同样的API的Scala版本将具有一个名为com.mycompany.rest.Foo的类,其中包含一个方法barBaz()。这只是命名约定,但我发现它可以很好地帮助API在某种程度上“适应”特定语言,即使它的设计是在其他地方创建的。

除此之外,我只有一个建议:文档、文档、文档。这是保持理智的最好方式,尤其是当你处理多种实现的API规范时。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接