Web services 使用复合DTO的Restful API设计

Web services 使用复合DTO的Restful API设计,web-services,rest,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呢?例如: //Listi

我得到了简单的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
GET /users?with_companies=yes
在这种情况下,我的API链接在我看来不再很干净或Restful了?我想知道如何以Restful的方式构造这些复合DTO的CRUD?请给我一些建议,或者把我链接到我可以学习的地方


非常感谢。

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

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

//List all companies with users and roles count in each company
GET /companiesWithUsersAndRolesCount
GET /users?with_companies=yes
在Restful中,您不应该将URI看作API命令。请尝试将URI视为可以获取、插入、更改和删除的实体。 没有其他“命令”的空间

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

另一种可能的RESTfull方法是使用POST创建“查询资源”对象,返回“查询资源ID号”,稍后将在单独的GET请求中使用。
这样,您就可以创建保存的查询,这些查询也可以高效地重新查询。

因此,使用此结构,GET/users?company=1&role=1&thistuff=1&thastuff=1&page=5&limit=20。。。像那样?使用编辑PUT/users/123?basic=1和full=1。。。继续下去。我说得对吗?差不多。通常,您应该提供URI参数来获取请求。要发布和放置,您应该在请求的主体部分提供参数,并保持URL干净