RESTful API设计(资源连接)

时间:2011-07-29 15:18:59

标签: php api rest relationship

我正在为我的Web项目(PHP)设计一个API,但在建模资源与属性之间的关系时会遇到麻烦。我想得到一些关于如何继续的意见。

资源:

  • 用户。
    • 同上
    • 名称。
    • 狗(关系)。
      • 同上
      • 私人(是或否)。
  • 狗。
    • 同上
    • 名称。

关系:

  • 很多很多。
    • 一个用户可以有很多狗。
    • 一只狗可以属于许多用户。
  • 这种关系可以是私人关系,也可以是公开关系。

您希望如何更新关系的“私人”属性?

现在您必须向... / api / users / {userId}发送PUT请求,包括该用户的所有关系,包括更新后的属性:

(名称可以为NULL - >无更新)

  • 狗:
    • 犬。
      • ID:DogA。
      • 私人:是的。
    • 犬。
      • ID:DogB。
      • 私人:不。(更新)

我对这种方法感到不舒服,因为我认为只需要发送已更改的信息进行更新。因此,我现在的想法是添加支持,仅将更新的关系发送到... / api / users / {userId}:

  • 狗。
    • 犬。
      • ID:DogB。
      • 私人:不。(更新)

在我开始工作之前,我非常感谢一些反馈。也许还有其他更好的方法来处理资源之间的关系?

1 个答案:

答案 0 :(得分:1)

这样做会违反REST服务是幂等的原则。这意味着您应该能够在不使用第二个操作更改资源的情况下发送相同的操作两次。

我将关系视为一个单独的资源: 创建/更新将为PUT ../api/users/{userId}/dogs/{dogId}私有:是/否。删除关系将由DELETE ../api/users/{userId}/dogs/{dogId}处理。