API设计:传递ID或完整对象

时间:2018-07-30 11:25:38

标签: api-design

假设有一个人和一个地址对象。该人员不拥有对该地址的引用,而仅拥有其ID。例如:

Person {
  id: PersonId,
  addressId: AddressId,
  name: String,
  ...
}

Address {
  id: AddressId,
  street: String,
  ....
} 

该模型是旧模型,无法更改。

现在您要在此人上设置一个地址,您将如何设计此调用的API。您只有两种可能:

void setAddress(PersonId id, Address address)

void setAddress(Person person, Address address)

如您所见,唯一的区别是,一次只发送了个人的ID,一次是发送了完整的person对象。

您会选择哪个?为什么?

PS:这个问题来自工作中的内部讨论,我只是对其他程序员/设计师如何看待它感兴趣。

1 个答案:

答案 0 :(得分:2)

我会选择第一个,因此此API的调用方仅需要提供最少的信息,并且API实现会获取进行调用所需的所有信息(在您的示例中,从数据库或其他内容中获取人员)。 第二个对我来说似乎不合逻辑,因为如果您传递整个人员对象,则还必须从数据源中获取人员(对象可能在调用期间已被修改),因此您将传递比在这种情况下需要。