0


我正在设计一些宁静的网址,但我尚未决定如何检索我的域的实体。
在较低级别,我有一个具有多对多和一对多关系的数据库。
假设实体是公司、组和用户。
Companies 和 Groups 之间的关系是一对多的(Groups 中的外键),Company 和 Users 之间也是如此。
而在组和用户之间,关系是多对可能的。

我对 RESTful API 的了解告诉我应该构建如下 URL:

  • http://mywebsite.com/company/, http://mywebsite.com/company/1/users/, http://mywebsite.com/company/1/groups/用于 post(创建新实体)和 get 方法;
  • http://mywebsite.com/company/1, http://mywebsite.com/company/1/users/1, http://mywebsite.com/company/1/groups/1用于 put(更新)、delete 和 get 方法;
  • http://mywebsite.com/company/1/users/1/groups/对于帖子(添加新关联)和获取方法。


现在,我的问题是如何从用户或组中读取(获取)、(并最终更新(放置)或更改公司(发布))。
基本上有3个选项:

  1. http://mywebsite.com/company/1/users/1/company并提供相同的 json 和 xml,http://mywebsite.com/company/1并拒绝重复的 url,如http://mywebsite.com/company/1/users/1/company/1/users..
  2. 在用户描述(或组)的 json 和 xml 中嵌套他公司的 json 和 xml,嵌套部分几乎与 http://mywebsite.com/company/1. 但是这个选项意味着在用户(或组)的每个请求中,两个表之间的连接,即使我有兴趣只知道用户的名字;
  3. 仅在用户和组的 json 和 xml 中提供外键值(公司的标识符)。
什么是最适合您的选择?为什么?

4

1 回答 1

0

我会选择更扁平的 URL 和操作。具体来说:


读取操作

  • GET /company?id={id}
    • 获取具有给定的公司id
  • GET /company/group?id={id}
    • 获取与给定公司关联的组id
    • 为分页添加额外的查询参数(如果合适)
  • GET /company/user?id={id}
    • 获取与给定公司关联的用户id
    • 为分页添加额外的查询参数(如果合适)
  • GET /group?id={id}
    • 获取具有给定的组id
  • GET /group/user?id={id}
    • 获取与给定组关联的用户id
    • 为分页添加额外的查询参数(如果合适)
  • GET /user?id={id}
    • 获取给定的用户id
  • GET /user/group?id={id}
    • 获取与给定用户关联的组id
    • 为分页添加额外的查询参数(如果合适)

添加操作

  • POST /company
    • 创建新公司
    • 返回新公司id作为回应
  • POST /group
    • 创建一个新组
    • 由于每个组都必须有关联公司,因此关联公司是 JSON/XML 帖子正文中的必填字段
    • 返回新组id作为响应
    • 由于每个集团都必须有一个关联公司,这也创建了公司与集团的联系
  • POST /user
    • 创建一个新用户
    • 由于每个用户都必须有一个关联公司,因此关联公司是 JSON/XML 帖子正文中的必填字段
    • 返回新用户id作为响应
    • 由于每个用户都必须有一个关联公司,这也创建了公司-用户连接
  • PUT /user/group?id={id}
    • 将一组组与给定的用户相关联id
  • PUT /group/user?id={id}
    • 将一组用户与给定的组相关联id

删除操作

  • DELETE /company?id={id}
    • 删除给定的公司id
    • 可以级联删除到关联的用户和组或阻止删除(如果存在)
  • DELETE /group?id={id}
    • 删除具有给定的组id
    • 同时删除关联的公司-集团连接
    • 不删除任何关联用户 - 仅删除用户组链接
  • DELETE /user?id={id}
    • 删除具有给定的用户id
    • 同时删除关联的公司-用户连接
    • 不删除任何关联组 - 仅删除用户组链接
  • DELETE /user/group?id={id}
    • 将一组组与用户与给定的用户解除关联id
  • DELETE /group/user?id={id}
    • 将一组用户与给定的组解除关联id

如果有任何不清楚的地方,请在评论中告诉我,我可以澄清。

于 2013-04-08T03:25:34.107 回答