假设我们有一个books
端点,可以在该端点返回序列化的Book对象。 大多数,这些是已经出版的图书(因此省略了future
),并且大多数,我们将显示图书列表属于一些用户。 (因此,大部分出现了user参数,而且我们大部分都过滤了属于某个用户的图书)
查询示例:
http://localhost:8000/api/books?future=true
http://localhost:8000/api/books?user=somebody
http://localhost:8000/api/books?future=true&user=somebody
我想知道上面的结构是否正常。我想到了其他一些想法,有些似乎比其他想法差。例如,另一个可选的端点/路径(而不是前一个):
// this makes the least sense to me
http://localhost:8000/api/books/somebody?future=true
我还考虑过从users
端点获取那些书是否有意义:
http://localhost:8000/api/users/somebody/books
http://localhost:8000/api/users/somebody/books?future=true
然后我也可以致电:
http://localhost:8000/api/users/somebody/settings
您是否同意第二种选择没有意义?
第一个例子和第三个例子可以彼此并存吗?
我想我真正要问的是:在REST设计中是否应该可以通过两种不同的方式获得相同的确切资源?您如何优先选择另一个?您何时只执行一项?您什么时候都允许(如果有的话)?
在这种情况下,API端点将由我自己开发的将来的iOS应用程序使用,但是我认为这与问题无关。