2008-10-11 67 views
3

我正在开发一对库以使用REST API。因为我需要能够以非常不同的设置使用API​​,所以我目前计划在PHP(用于Web应用程序)和Python中的第二个版本(用于桌面应用程序和长时间运行的进程)中使用一个版本。在图书馆的发展过程中是否有最佳实践来帮助维护我自己的理智?开发一致性库的最佳实践是什么?

回答

6

因此,开发不同语言的并行库的问题在于,对于同一个任务,通常不同的语言会有不同的习语。我从个人经验中了解到这一点,他将一个图书馆从Python移植到PHP。习惯用法不仅仅是命名:例如,Python有很多可用于getter和setter的魔法,使对象属性变得神奇; Python有monkeypatching; Python已经命名参数。用一个端口,你想选择一种“基础”语言,然后尝试模仿其他语言的所有习语(不容易);对于并行开发,不要做太麻烦的事情,并且迎合最不共同的分母是可取的。然后栓上语法糖。

0

那么,显而易见的就是保持你的命名一致。在两个实现中,函数和类应该以类似的方式命名(如果不是相同的话)。这通常会在您以两种不同的语言单独实现API时自然发生。尽管(至少在我的书中)大项目是遵循语言特定的习语。例如,让我们假设我正在用我更熟悉的两种语言实现REST API:Ruby和Scala。 Ruby版本可能有MyCompany::Foo类,其中包含方法bar_baz()。相反,同一个API的Scala版本将有一个类com.mycompany.rest.Foo,方法barBaz()。这只是命名约定,但我发现,要帮助API以特定语言感受“在家”,即使设计是在其他地方创建的,也有很长的路要走。

除此之外,我只有一条建议:文档,文档,文档。在处理多实施API规范时,这很容易保持您的理智。

2

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

2

试着为两者编写一个通用的单元测试套件。也许可以用一种语言包装一个类来从另一个语言中调用它。如果你做不到,至少要确保两个版本的测试是相同的。

0

AFAIKT有很多从脚本语言的桥梁。我们来看看例如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应用程序(在守护进程模式下)相互交谈。

+0

在我们的例子中,这是因为我们有一套现有的PHP工具套件,必须移植。 – acrosman 2009-06-06 06:05:58