3

我正在开发一对库来使用 REST API。因为我需要能够在非常不同的设置中使用 API,所以我目前计划有一个 PHP 版本(用于 Web 应用程序)和一个 Python 版本(用于桌面应用程序和长时间运行的进程)。在开发图书馆时是否有任何最佳实践可以帮助我保持理智?

4

6 回答 6

6

因此,用不同语言开发并行库的问题在于,通常不同的语言对于相同的任务会有不同的习语。我从个人经验中知道这一点,将一个库从 Python 移植到 PHP。习语不仅仅是命名:例如,Python 有很多魔法,您可以使用 getter 和 setter 来使对象属性发挥神奇的作用;Python 有猴子补丁;Python 有命名参数。

使用移植,您想选择一种“基础”语言,然后尝试模仿另一种语言中的所有习语(不容易做到);对于并行开发,最好不要做任何太棘手的事情并迎合最小的共同点。然后加上语法糖。

于 2008-10-11T05:46:00.297 回答
2

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

于 2008-10-11T05:46:18.237 回答
2

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

于 2008-10-11T07:28:57.937 回答
0

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

除此之外,我只有一条建议:文件、文件、文件。在处理多实现 API 规范时,这很容易成为保持理智的最佳方式。

于 2008-10-11T05:42:41.647 回答
0

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

或者,将这些东西建立在 .NET 上并不是最糟糕的主意,然后您突然有一大堆语言可供您使用,原则上这些语言应该可以从 .NET 平台上的所有其他语言中使用。

于 2008-12-23T14:41:44.470 回答
0

为什么不将 python 用于 Web 应用程序呢?有几个可用的框架:django、web2py - 类似于 django 但许多人说它更易于使用,还有 TurboGears、web.py、Pylons

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

于 2009-06-06T05:41:05.460 回答