使用复合DTO的Restful API设计

时间:2014-01-01 03:45:34

标签: web-services rest

我在一种类型的对象后面得到了简单的Restful设计:

GET /users
GET /users/123
POST /users/new
POST /users/1/edit (or PUT)
POST /users/1/delete (or DELETE)
...

关注从一种对象到另一种对象的关系:

GET /user/123/company
GET /user/123/roles
POST /user/123/roles/new
…

复合DTO混合多个物体怎么样?例如:

//Listing all users with their companies and primary role
GET /usersWithCompaniesAndPrimaryRoles 

//List all companies with users and roles count in each company
GET /companiesWithUsersAndRolesCount

在这种情况下,我的API链接看起来不太干净或者不再适合我了?我想知道如何以一种宁静的方式构建这些复合DTO的CRUD?请告诉我,或将我链接到我可以学习如何做到的地方?

非常感谢。

1 个答案:

答案 0 :(得分:1)

Restful设计应该有这样的API路径。 相反,您应该使用GET /users URI,并提供查询参数。例如:

GET /users?with_companies=yes

在Restful中,您不应将URI视为API命令。尝试将URI视为实体,然后尝试获取,插入,更改和删除。 其他“命令”没有空间。

这就是为什么,例如, 不应该有POST /users/new API路径。
相反,只需发布​​到/users

另一种可能的RESTfull方法是使用POST创建“查询资源”对象,返回“查询资源ID号”,稍后将在分离的GET请求中使用。 通过这种方式,您可以创建已保存的查询,这些查询也可以有效地进行重新查询。