我想定义一个REST,其一般模式为:
mysite.com/OBJECT_ID/associations
例如:
mysite.com/USER_ID/vacations
-管理用户vacationmysite.com/USER_ID/music
-管理用户音乐librarymysite.com/PLAYLIST_ID/music
中的音乐-在给定的播放列表上下文中管理音乐
我在服务器端使用龙卷风,并寻找关于如何为这个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)
这似乎不对,但我真的不明白如何使这件事成功。我相信这是一个很简单的问题,我对巨蟒和龙卷风很陌生。
发布于 2011-04-18 18:17:23
首先,为了防止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
发布于 2011-05-26 14:05:12
if not self.db.get("SELECT 1 FROM objects WHERE music_id = %s", object_id):
raise HTTPError(404, "Music object %s not found" % name)
mysite.com/music/MUSIC_ID
计划对我来说更有意义。
https://stackoverflow.com/questions/5560638
复制相似问题