重载 RESTful 网页 API

Overloading RESTful Web API

我有一个方法定义:

public async Task<IHttpActionResult> FindUsers([FromBody]User user)

这使用 class:

public class User
{
    public string UserId { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

我想在不破坏当前客户端现有端点的情况下扩展它的功能。

所有客户端都使用 System.Net.Http.HttpClient 的实例向 [=​​45=] 端点发出请求。他们接受 JSON 响应并将其反序列化为 User 个实例的列表:

var user = JsonConvert.DeserializeObject<User>(content);

我想添加一个 属性 给用户 class:

public IList<string> Countries { get; set; }

我不希望这会破坏现有客户端的端点。也就是说,我希望他们能够继续反序列化到他们的 User class 的实例中而不会出现问题。

如果他们希望利用更新的功能,我也希望他们能够反序列化为 User class 的更新版本。

扩展功能将在端点中实现。它会检测请求中是否提供了 Countries 列表,如果是,则执行不同的操作,因此,return 响应 - 其中包括 Countries 列表。

是否可以在不破坏现有客户端端点的情况下做到这一点?

根据我的经验,添加 这样的数据通常 不是问题。

如果您将数据发送给客户端,他们不需要期望或使用它。
他们可能没有 属性 来反序列化国家,但这应该不是问题。
他们看不到它,不使用它,等等

您方法的签名没有改变(您基本上仍然期待一个User对象)所以每个人仍然可以使用相同的端点。如果它们碰巧供应国家/地区,那么它们将被反序列化为您的新模型。如果他们不提供国家/地区,则不会设置 属性。

然后由您根据是否提供该数据来决定要做什么。

如您所料,这是根据我自己的经验得出的粗略答案。
您的情况可能(很可能)比问题所表达的更复杂,但希望这能提供一些帮助。