2017-07-10 130 views
1

我正在尝试为使用aiohttp库的python 3 asyncio程序创建一个REST API应用程序。asyncio REST API动态路由

在此程序中,我管理的对象由更多对象组成,例如管理包含许多不同产品的客户购物车的对象,例如 。

将新对象(产品)添加到容器(购物车)时,我希望它是一个具有独特功能的子应用程序,例如,乳制品将具有到期日期,饮料将具有酒精百分比。

的问题是,需要不同产品的不同路径解析为不同的子应用,例如: 如果我们的路径格式是: /{cart_id}/{product_name}则:

/1/milk - >需要到解决到乳品分应用,而

/1/whiskey - >需要解决饮料子应用。

我还希望子应用程序有权访问{cart_id}值。

总的来说,这些子应用程序类型只有大约3个,因此不需要非常复杂的解决方案。

我目前正在重写aiohttp.Router类来禁止它冻结,以允许动态添加路线,但这是非常可怕的。

如果有人遇到过类似的问题,或者可以指点我一个更好的解决方案,这将是非常有益的。

回答

1

你说得对,覆盖路由器禁用冻结是一个坏主意。

更好地做你自己的自定义路由。例如。一个接收所有请求然后决定哪个其他视图应该处理每个请求的视图。

请看文档中的Custom Routing Criteria

+0

该解决方案仅适用于单一路径,我希望为不同类型的产品提供完整的不同路径集合。 – roundmilf

+0

您仍然可以使用不同的路径,只需在路由器视图的路径中使用[variables](http://aiohttp.readthedocs.io/en/stable/web.html#variable-resources)即可。 – SColvin

+0

谢谢!完美的作品 – roundmilf