适用于多种应用的适当Rest API设计

时间:2014-01-15 03:04:27

标签: php rest

假设我们有一个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 

然后他们将拥有最新订购的用户组的所有帖子,这也是流程。

哪种方式最好?

2 个答案:

答案 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条件更容易实现。