我想使用以下一般模式定义REST API:mysite.com/OBJECT_ID/associations
例如:
mysite.com/USER_ID/vacations
-管理用户假期mysite.com/USER_ID/music
-管理用户音乐库中的音乐mysite.com/PLAYLIST_ID/music
-在给定播放列表的上下文中管理音乐我在服务器端使用 Tornado ,并正在寻找有关如何为此API定义RequestHandler的建议。例如,我想定义一个处理程序,例如:
/([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/