2013-07-27 30 views
0

我正在研究基于Web的系统的后端。我的代码将接收来自我们网站的电话并执行用户请求的操作。我们希望同时支持我们前端的多个版本。因此,例如,我可能会收到来自我们前端的V1或V2的请求。我需要回应这些电话。如何构建Python代码以支持MY项目的多个版本(即不是多个Python版本)

正如您所预料的那样,我的许多代码在各个版本中都是相同的。例如,我的函数* get_list_access_params()*可能会出现在V1和V2中(尽管可能会对其中的代码进行一些更改)。我的听众应该抓住请求,找出我们的系统是哪个版本的调用来的,然后调用* get_list_access_params()*的正确版本。

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

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

回答

0

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

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

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

所以我认为这个解决方案并不在于python技巧,而是在仔细设计子进程的API,以便在子进程功能增加时API不会中断。

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后端实例。

+0

如果我正确地阅读了这个问题,它是调用他的python子进程的网站代码。 – flup

+0

是的,但是在一个代码版本中实现不同的“代码版本”只是很脏。一个*可以*在更高级别上分离不同的代码版本,这是应该做的。 “我们希望同时支持我们前端的多个版本” - 可以认为这个子进程代码是前端的一部分。如果他们部署不同的前端版本,则问题可以通过定义来解决。 –

0

这里有几个技巧 - 他们基本上对本学科的开发团队的部分回复:

  1. 发布的API,并坚持下去同名的所有V2功能必须接受相同参数并在所谓的时候返回兼容的结果。
  2. 有一个通用的接口说fred,只是包装你的V1功能
  3. 制作使用命名和默认的参数,而不是位置参数,那么如果你的第2版代码支持一些额外的参数,但默认设置造成的版本1的行为你将是金色的。
  4. 使用命名空间
  5. 如果定义在fn(*arg, **agv)格式的功能,你可以在你的一般接口的包装,如果V1和V2功能意在给定调用的作品出来。
  6. 您可以在可能不明确的所有功能中使用可选参数ifversion=1,并且在您明确需要版本2功能时使用它。

还有一种非常简单的方法,用于V2前端连接到不同的端口或在html请求中使用特定的标志。