使用 REST API 更新嵌套对象

Mhd*_*Mhd 5 api rest

我有资源Student和 4 个 API 端点:

POST: /students
GET: /students/{id}
PUT: /students/{id}
DELETE: /students/{id}
Run Code Online (Sandbox Code Playgroud)

现在,我想将新属性Address作为对象添加到Student

class Student 
{
   public int Id;
   public string Name;
   public Address Address;
}
Run Code Online (Sandbox Code Playgroud)

AddressStreet也有作为对象的属性。

我的问题是,如果我只想更新addressstreet,最好是:

  • 使用更新学生 API:提供所有学生属性,即使它们没有更改
  • 创建新端点PUT: /students/{id}/addressPUT: /students/{id}/address/street

cod*_*ane 2

这取决于您希望 API 对客户端的友好程度。我最近看到一个返回对象的 API,但为了更新对象中的单个字段,客户端必须调用另一个端点来获取额外信息以添加到原始对象中,以便 PUT 更新后的对象。我认为这是对客户不友好的。

如果客户GETsaStudent并且他们获得完整的对象Id,那么我希望能够处理完整的对象,更新与数据库中或对象存储位置不同的字段Name。如果 API 为客户端提供完整的对象,那么 API 应该是客户端友好的,并且能够接受完整的对象,而不是让客户端解构该对象。AddressStreetPUT: /students/{id}

如果 API 首先为客户端提供了完整的对象,我不希望客户端必须Address从 中提取 ,然后从地址中Student提取并将其发送到。StreetPUT: /students/{id}/address/streetStudent

这种方法的唯一缺点是带宽。如果街道上的单个字母发生变化,则客户必须更改PUT整个Student对象。因此,这实际上取决于客户端是什么以及它在什么网络上运行。互联网上的 REST 客户端?接受完整的对象。资源受限设备上的嵌入式客户端?它可能需要发送对象的片段,但这会导致 REST 端点与Student对象层次结构相匹配,这对我来说是紧密耦合的,并不真正推荐。