我正在开发一对库以使用REST API。因为我需要能够在非常不同的设置中使用API,我目前正计划在PHP中使用一个版本(用于Web应用程序),在Python中使用第二个版本(用于桌面应用程序和长时间运行的进程)。在图书馆的发展中是否有任何最佳实践可以帮助保持自己的理智?
答案 0 :(得分:6)
因此,在不同语言中开发并行库的问题在于,不同语言通常会对同一任务使用不同的习语。我从个人经验中了解到这一点,将一个库从Python移植到PHP。成语不仅仅是命名:例如,Python有很多魔法,你可以使用getter和setter来使对象属性变得神奇; Python有monkeypatching; Python命名了参数。
使用端口,你想选择一种“基础”语言,然后尝试用另一种语言模仿所有习语(不容易做到);对于并行开发而言,没有做任何过于棘手的事情,并且最适合使用最小公分母。然后关注语法糖。
答案 1 :(得分:2)
'做你自己的客户':我发现首先编写测试的技术是确保API易于使用的绝佳方法。编写测试首先意味着您将像API的“消费者”而不仅仅是实现者。
答案 2 :(得分:2)
尝试为两者编写通用的单元测试套件。也许通过用一种语言包装一个类来从另一个语言中调用它。如果你不能这样做,至少要确保两个版本的测试是等价的。
答案 3 :(得分:0)
嗯,显而易见的是保持命名一致。在两个实现中,函数和类应该以相似的方式命名(如果不相同)。当您以两种不同的语言单独实现API时,这通常会自然发生。虽然这个大件物品(至少在我的书中)是遵循语言特定的习语。例如,让我们假设我用两种我更熟悉的语言实现REST API:Ruby和Scala。 Ruby版本可能包含类MyCompany::Foo
,其中包含方法bar_baz()
。相反,同一API的Scala版本将使用方法com.mycompany.rest.Foo
的类barBaz()
。它只是命名约定,但我发现它可以帮助您的API在特定语言中感受到“在家”,即使设计是在其他地方创建的。
除此之外,我只有一条建议:文件,文件,文件。在处理多实现API规范时,这很容易成为保持理智的最佳方式。
答案 4 :(得分:0)
AFAIKT有许多桥接到脚本语言。让我们来看看例如Jruby,它是Ruby + Java,然后有些东西可以用Python(或其他方式)嵌入Ruby。然后是像Etoile这样的例子,其中基础是Objective-C,但也是Python和Smalltalk的桥梁,另一种广泛使用的方法:包装C库,例子是libxml2,libcurl等等。也许这可能是基础。假设您为Python编写了全部内容,但确实实现了与PHP的桥接。所以你没有那么多平行的发展。
或者也许最糟糕的想法就是基于那些东西让我们说在.NET上,然后你突然有一大堆语言可供你使用,原则上应该可以从.NET平台上的其他语言使用。
答案 5 :(得分:0)
为什么不将python用于Web应用程序呢?有几个框架可用:django,web2py - 类似于django,但很多人说它使用起来更简单,还有TurboGears,web.py,Pylons
沿着桥接线 - 你可以使用进程间通信让PHP和python应用程序(在守护进程模式下)相互通信。