实现这个API的RESTful方式是什么?

3
我正在尝试开发一款办公室音乐播放器,需要与restful API相关。简而言之,该API将能够从YouTube下载音乐并将其加载到正在运行的MPD实例的当前播放列表中。我还希望能够通过API控制播放/音量。以下是我目前的想法:
Endpoint: /queue
    Methods:
        GET: Gets the current MPD playlist
        POST: Accepts JSON with these arguments:
           source-type: specify the type of the source of the music (usually youtube, but i might want to expand later to support pulling from soundcloud, etc)
           source-desc: Used in conjunction with source-type, ie, if source-type were youtube, this would be a youtube search query
           It would use these arguments to go out and find the song you want and put it in the queue
        DELETE: Would clear the queue

Endpoint: /playbackcontrol
    Methods:
        GET: Returns volume, whether playing, paused, or stopped, etc
        POST: Accepts JSON with these arguments:
            operation: describe the operation you want (ie, next, previous, volume adjust)
            optional_value: value for operations that need a value (like volume)

所以,这就是我目前的想法。我知道这非常高级,我只是想获得一些反馈,看看我是否走在正确的方向上。这个实现API的方式看起来可行吗?

2个回答

2

清空队列不是一个好的DELETE操作。相反,可以PUT一个空的队列表示。这在以后需要重新排列队列、逐个删除等操作时也会派上用场。你可以GET当前队列,应用更改并将其PUT回去。

音量最好建模为一个独立的/status/volume资源,具有GET和PUT方法。如果您绝对需要不同的“增加音量”和“降低音量”操作(即,如果您的客户端不会跟踪当前音量),则可以使用PATCH方法。

对于播放/暂停/停止状态也是一样:使用GET/PUT /status/playback

为了向客户端提供当前状态,可以使GET /status响应摘要:当前曲目、音量、正在播放/暂停。


太棒了!我肯定会使用大部分,如果不是全部的话。这正是我在寻找的。 - Dan Cauley
你认为我添加音乐到队列的方法怎么样?另外,你会如何在这个API中实现“随机播放”功能? - Dan Cauley
@DanCauley 添加到队列的POST请求非常合适。随机播放:有两种方法(与普通桌面播放器相同):您可以设置特殊的“随机播放”模式,也可以实际重新排列队列中的项目。前者与音量或播放相同。后者,我认为最好是获取当前队列,在客户端上进行随机播放,然后将其PUT回去。 - Vasiliy Faronov
谢谢您再次提供意见!我想为您点赞,但是我还没有足够的声望 :P - Dan Cauley
嗨,Vasilly!我有另一个快速问题:你认为实现“下一个”操作最具休息效果的方式是什么?也就是说,在播放列表中跳转到下一首歌曲? - Dan Cauley

1

我会使用以下两个主要模块:

playlist/{trackId}
    source
    index
player
    playing
    track
    time
    volume

播放列表:
  • 添加音轨:POST playlist {source: ...}
  • 删除音轨:DELETE playlist/{id}
  • 调整音轨顺序:PUT playlist/{id}/index 123
  • 获取音轨列表:GET playlist
播放器:
  • 加载音轨:PUT player/track {id: 123}
  • 倒带音轨:PUT player/time 0
  • 停止播放器:PUT player/playing false
  • 开始播放器:PUT player/playing true
  • 调整音量:PUT player/volume .95
  • 获取当前状态:GET player
当然,您应该使用适当的RDF词汇来描述链接关系和数据。 您可能可以在这里找到它。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接