Php RESTful API设计(资源连接)

Php RESTful API设计(资源连接),php,api,rest,relationship,Php,Api,Rest,Relationship,我正在为我的web项目(PHP)设计一个API,但在用属性建模资源之间的关系时遇到了麻烦。我想了解一些关于如何进行的信息 资源: 用户。 身份证 名字 狗(关系)。 身份证 私人(是或否) 狗。 身份证 名字 关系: 多对多。 一个用户可以有许多狗 一只狗可以属于许多用户 这种关系可以是私人的,也可以是公共的 您希望如何更新关系的“私有”属性 现在,您必须向…/api/users/{userId}发送PUT请求,包括该用户的所有关系,包括更新的属性: (名称可以为空->无

我正在为我的web项目(PHP)设计一个API,但在用属性建模资源之间的关系时遇到了麻烦。我想了解一些关于如何进行的信息

资源:

  • 用户。
    • 身份证
    • 名字
    • 狗(关系)。
      • 身份证
      • 私人(是或否)
  • 狗。
    • 身份证
    • 名字
关系:

  • 多对多。
    • 一个用户可以有许多狗
    • 一只狗可以属于许多用户
  • 这种关系可以是私人的,也可以是公共的
您希望如何更新关系的“私有”属性

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

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

  • 狗:
    • 狗。
      • 身份证:多加
      • 二等兵:是的
    • 狗。
      • 私人:否(已更新)
我对这种方法感到不舒服,因为我认为只有已经更改的信息才需要发送更新。因此,我现在的想法是添加只将更新的关系发送到…/api/users/{userId}的支持:

  • 狗。
    • 狗。
      • 私人:否(已更新)

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

这样做会违反REST服务是幂等的原则。这意味着您应该能够发送相同的操作两次,而无需在第二次操作中更改资源

我会将这种关系视为一种单独的资源:
创建/更新将是带有Private:Yes/No的
PUT../api/users/{userId}/dogs/{dogId}
。删除关系将由
DELETE../api/users/{userId}/dogs/{dogId}
处理。好的,我一直在考虑一个单独的资源。但是,您如何为一个用户请求所有关系呢?@Mattias:
GET/api/users/{userId}/dogs/[dogId/]
?如果未指定
dogId
,您将获得与
userId
的所有关系。对我来说,“get/api/users/{userId}/dogs”实际上会给我所有与{userId}有关系的dog对象(而不是关系)。否则,如果我想查看用户的所有dog对象,我必须首先查询关系,然后分别查询每个dog对象(…/api/dogs/{dogId})。这对我来说似乎很复杂…@Mattias:就你所提到的,
GET/api/users/{userId}/dogs/relationships/
有什么问题吗。我也一直在考虑独立资源(“关系”)。但在这种情况下,我认为它应该是这样的:
GET/api/relationships,GET/api/relationshipId},GET/api/users/{userId}/relationships,GET/api/dogs/{dogId}/relationships
。在我看来,这可能是最干净的解决方案。。