我想使用以下一般模式定义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/

    10-12 21:09