父代的API约定 - >子元素调用

时间:2016-05-17 22:48:19

标签: api rest

我们正试图弄清楚是否有一种普遍接受的提供API父母的方式 - >儿童资源。假设我们有一个Person实体,每个Person都有0个或更多地址实体所代表的地址。

就我们的基本API而言:

POST:    /api/v1/person
GET:     /api/v1/person/{id}
PUT:     /api/v1/person/{id}
DELETE:  /api/v1/person/{id}

然后我们有两种方法来检索一个人的地址:

  1. /api/v1/person/{id}/addresses
  2. /api/v1/addresses/{personId}
  3. 我们觉得为GET选择前一个选项/person/{id}/addresses更自然,但同时如果我们想通过其ID检索地址,那么它应该是/api/v1/address/{id}

    问题是,是否有处理POST,PUT和DELETE调用的约定?对我来说,有意义的是,这些应该被调用到/api/v1/address OR /api/v1/address/{id}的地址服务,但同时我可以看到为什么有人会POST到`/ api / v1 / person / {id} / address'而不是传递请求正文中的人员身份。

    所以,是的,你们可以在这里指出我们正确的方向 - 当涉及到父母时,API设计中是否有书面或不成文的规则 - >孩子的关系?

    提前致谢!

1 个答案:

答案 0 :(得分:3)

地址是否可以在没有人的情况下存在?如果答案是肯定的,那么地址应该是它自己的资源。

  • /api/v1/addresses:所有地址的集合
  • /api/v1/addresses/{addressId}:单个地址
  • /api/v1/addresses?person={personId}:一个人的所有地址

我没有使用/api/v1/addresses/{personId},因为personId是一个人的ID,而不是收件人的ID,并不是很明显。

但与此同时,/api/v1/person/{id}/addresses应该可以从一个人导航到他的所有地址。

如果没有人不能存在地址,请仅使用/api/v1/person/{id}/addresses