假设我们有一个API,可供多个应用程序从Web到移动设备使用 我作为API开发人员被要求让它变得安静。考虑到休息,我会将数据库中的每个表都作为一个模型,并使每个表都成为一个资源。
用户可以属于多个群组。
例如:
User Model
Group Model
Post Model
Comments Model
所需的API之一是用户流程。
# querying this one api would return all the data they asked for the flow
# which is easy for our internal developers
# but the api is also to be released publicly for outside developers
# some devs wouldn't need this
api.example.com/user/flow
该流程是用户所属的所有群组的列表,包含每个群组的所有帖子,以及每个帖子的评论。
最初我用这种方式编码,一个控制器编译为userController@flow
。
但哪个更好,上面还是我会做他们做的事情:
查询:
# gets the data of user 1
api.example.com/user/1
# gets the groups of user 1
api.example.com/group?userid=1
# gets all the post on the groups and order everything by latest first, with initial 4 previewed comments.
api.example.com/posts?groupid=1,2,3,4&with=comments:4&order=desc
然后他们将拥有最新订购的用户组的所有帖子,这也是流程。
哪种方式最好?
答案 0 :(得分:0)
# gets the data of user 1
api.example.com/users/1
还应为用户1返回“群组”,因此无需拥有api.example.com/group?userid=1。
我要说每个帖子都必须属于一个群组/用户,所以用户/群组发帖子的基本形式是:
api.example.com/groups/1/posts
api.example.com/users/1/posts
最后,要搜索所有帖子:
api.example.com/posts?q=search+query
答案 1 :(得分:0)
在解决类似的问题时,我必须根据某些条件过滤资源列表,我在https://developers.google.com/ad-exchange/seller-rest/filters中遇到了过滤器。
就是这样:
pi.example.com/posts?filter=groupid == 1, groupid == 2, groupid == 3
我喜欢这种方法,因为它使URL更清晰,更容易理解。 OR和AND条件更容易实现。