gpt4 book ai didi

python - 使用 Tornado RequestHandler 时最好的 REST 实现是什么

转载 作者:太空狗 更新时间:2023-10-30 01:17:19 26 4
gpt4 key购买 nike

我想定义一个具有以下一般模式的 REST API:

mysite.com/OBJECT_ID/associations

例如:

  • mysite.com/USER_ID/vacations - 管理用户假期
  • mysite.com/USER_ID/music - 管理用户音乐库中的音乐
  • mysite.com/PLAYLIST_ID/music - 在给定播放列表的上下文中管理音乐

我在服务器端使用 tornado 并寻找有关如何为该 API 定义 RequestHandlers 的建议。例如,我想定义一个处理程序,例如:/([0-9,a-z,A-Z,-]+)/music",MusicHandler), 但是我卡在了 MusicHandler 的实现上,它需要知道在uri首先支持音乐,即如何防止像

这样的电话

mysite.com/LOCATION_ID/music

位置与音乐无关。

是修改 api 以包含类型的最佳解决方案,即:

mysite.com/users/USER_ID/music

mysite.com/playlists/PLAYLIST_ID/music

然后为每个单独的处理程序:

/users/([0-9,a-z,A-Z,-]+)/music",UserMusicHandler),

/playlists/([0-9,a-z,A-Z,-]+)/music",PlaylistMusicHandler)

这似乎不对,但我真的不明白如何让它发挥作用。我确定这是一个简单的问题,我是 python 和 Tornado 的新手。

最佳答案

首先,为了防止 mysite.com/LOCATION_ID/music,我会在您的所有 ID 之间创建差异。例如,将 LOCATION_ID 设置为 32 个字符的字符串,将 PLAYLIST_ID 设置为 34 等。这样您可以在调用处理程序后立即检查字符串长度。


或者,您可以使用正则表达式组在 URI 中捕获它,然后为每个定义不同的处理程序。 (此外,您的 ID 可能应该位于 URI 中的所有静态文本之后,只是为了良好的约定)。例如,如果您的 PLAYLIST_ID 是一个 UUID 而您的 LOCATION_ID 是一个字符串:

(r"/music/([\w]{8}-[\w]{4}-[\w]{4}-[\w]{4}-[\w]{12})", PlaylistMusicHandler), #playlistID
(r"/music/([A-Za-z0-9]+)", LocationHandler), #locationID

关于python - 使用 Tornado RequestHandler 时最好的 REST 实现是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5560638/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com