如何构建Python代码以支持MY项目的多个版本(即不是多个版本的Python)

时间:2013-07-27 13:24:45

标签: python subprocess

我正在研究基于网络的系统的后端。我的代码将接收来自我们网站的电话并执行用户请求的操作。我们希望同时支持多个版本的前端。因此,例如,我可能会收到来自我们前端的V1或V2的请求。我需要回复其中任何一个电话。

正如您所料,我的许多代码在不同版本中都是相同的。例如,我的函数* get_list_access_params()*可能会出现在V1和V2中(尽管代码中可能会有一些变化)。我的听众应该抓住请求,弄清楚调用来自哪个版本的系统,然后调用正确版本的* get_list_access_params()*。

我希望不必将函数复制并重命名为v1_get ...和v2_get ...而是将函数复制到两个代码文件中,即v1文件和v2文件。

这一定是常见的需求,但我无法弄清楚在哪里寻找答案。有没有人有一个快速的答案,或者你可以指导我到一个简单的地方找到它(我是一个Python新手,BTW)?谢谢!

3 个答案:

答案 0 :(得分:0)

您的子流程为网站提供API。

诀窍是使子进程代码的API v2可以处理来自v1和v2网站的调用。这称为向后兼容性。

此外,如果v1网站对其收到的数据不太挑剔,并且可以例如处理来自子进程的v2答案,它具有比v1中更多的信息,那就太好了。这称为向前兼容性。 Json和xml是实现它的好方法,因为你可以随意添加属性和属性,而不会损坏旧属性的解析。

因此,我认为解决方案不在于python技巧,而在于精心设计子流程的API,以便在子流程功能增加时API不会中断。

答案 1 :(得分:0)

首先,这是一个非常正常的问题,具有直接的解决方案。 解决方案的级别高于Python代码。您可能有一些暴露于互联网的前端接收和处理请求。其中一些请求被转发到基于Python的后端,其他请求被拒绝,其他请求由前端直接回答。这种前端通常还用于通过以某种“智能”方式将请求转发到多个后端服务器来执行负载平衡。这些天,nginx经常用于此。如果你没有这样的前端,你应该部署一个。但是从“我的代码将接收来自我们网站的电话”我猜你有一个实体在它们到达你的Python应用程序之前处理请求。

您的问题的解决方案是部署基于Python的后端的不同版本。只需为不同的代码版本运行不同的“服务器”。然后,根据例如,由前端决定将哪个请求转发到哪个后端。简单的URL解析。

示例:

http://application.com/submit_data?v=1

将由您的前端解析。它看到v=1并且知道该请求应该传递给后端服务器,例如在localhost:3000

其他请求,例如

http://application.com/submit_data?v=2

被配置为转发到例如localhost:3001,一个完全独立的Python后端实例。

答案 2 :(得分:0)

有一些技巧 - 他们基本上回应了开发团队的纪律部分:

  1. 发布API并坚持所有同名的V2函数必须接受相同的参数并在调用时返回兼容的结果。
  2. 有一个通用界面说fred只包装你的V1函数
  3. 使用命名和默认参数而不是位置参数,如果你的版本2代码支持一些额外的参数,但默认值导致版本1行为,你将是金色的。
  4. 使用命名空间
  5. 如果您以fn(*arg, **agv)格式定义函数,则可以在通用接口中使用包装器,如果V1或V2函数适用于给定的调用,则可以使用该函数。
  6. 您可以在所有可能含糊不清的函数中使用可选参数ifversion=1,并在特别需要版本2时使用它。
  7. 另一个非常简单的方法是让V2前端连接到不同的端口或在html requrest中使用特定的标志。