Php 开发一致性库的最佳实践是什么?

Php 开发一致性库的最佳实践是什么?,php,python,api,rest,Php,Python,Api,Rest,我正在开发一对库来使用RESTAPI。因为我需要能够在非常不同的设置中使用API,所以我目前计划使用PHP版本(用于web应用程序)和Python版本(用于桌面应用程序和长时间运行的进程)。在开发这些库的过程中,有没有什么最佳实践可以帮助我保持理智?好吧,显而易见的一点是保持命名的一致性。在两种实现中,函数和类的名称应该相似(如果不相同的话)。这通常会在您使用两种不同的语言分别实现API时自然发生。不过,最重要的一点(至少在我的书中)是遵循特定语言的习惯用法。例如,让我们假设我正在用我更熟悉的两

我正在开发一对库来使用RESTAPI。因为我需要能够在非常不同的设置中使用API,所以我目前计划使用PHP版本(用于web应用程序)和Python版本(用于桌面应用程序和长时间运行的进程)。在开发这些库的过程中,有没有什么最佳实践可以帮助我保持理智?

好吧,显而易见的一点是保持命名的一致性。在两种实现中,函数和类的名称应该相似(如果不相同的话)。这通常会在您使用两种不同的语言分别实现API时自然发生。不过,最重要的一点(至少在我的书中)是遵循特定语言的习惯用法。例如,让我们假设我正在用我更熟悉的两种语言实现RESTAPI:Ruby和Scala。Ruby版本可能有一个类
MyCompany::Foo
,其中包含方法
bar_baz()
。相反,同一API的Scala版本将有一个类
com.mycompany.rest.Foo
,其方法是
barBaz()
。这只是命名约定,但我发现它可以帮助您的API在特定语言中感觉“自在”,即使设计是在其他地方创建的


除此之外,我只有一条建议:文件,文件,文件。这是处理多实现API规范时保持头脑清醒的最佳方法。

因此,用不同语言开发并行库的问题是,不同的语言往往会对同一任务使用不同的习惯用法。我从个人经验中了解到这一点,我已经将一个库从Python移植到PHP。习语不仅仅是命名:例如,Python有大量的魔力,你可以使用getter和setter使对象属性表现出魔力;Python有修补程序;Python已经命名了参数


对于端口,您希望选择一种“基本”语言,然后尝试模仿其他语言中的所有习惯用法(不容易做到);对于并行开发来说,最好不要做任何太棘手的事情,并且迎合最小的共同点。然后使用语法sugar。

做你自己的客户机:我发现,先编写测试的技术是确保API易于使用的一种很好的方法。首先编写测试意味着您将像API的“消费者”一样思考,而不仅仅是实现者

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

AFAIKT从脚本语言到脚本语言之间有很多桥梁。让我们以Jruby为例,它是Ruby+Java,然后在Python中嵌入Ruby(或者以其他方式)。还有像Etoile这样的例子,其基础是Objective-C,但也连接到Python和Smalltalk,这是另一种广泛使用的方法:包装C库,例如libxml2、libcurl等。也许这就是基础。假设您的全部代码都是为Python编写的,但确实实现了到PHP的桥接。所以你没有那么多平行发展


或者说,将这些东西建立在.NET上并不是最糟糕的想法,那么突然间,你就有了一大堆语言供你使用,这些语言原则上应该可以从.NET平台上的所有其他语言中使用。

为什么不在web应用程序中使用python呢?有几种可用的框架:django、web2py——与django类似,但许多人说它使用起来更简单,还有TurboGears、web.py和Pylons


沿着桥接的路线-您可以使用进程间通信让PHP和python应用程序(在守护进程模式下)相互通信。

在我们的例子中,这是因为我们有一套PHP工具,必须进行移植。您有理由。我明白了。