重载 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
对象)所以每个人仍然可以使用相同的端点。如果它们碰巧供应国家/地区,那么它们将被反序列化为您的新模型。如果他们不提供国家/地区,则不会设置 属性。
然后由您根据是否提供该数据来决定要做什么。
如您所料,这是根据我自己的经验得出的粗略答案。
您的情况可能(很可能)比问题所表达的更复杂,但希望这能提供一些帮助。
我有一个方法定义:
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
对象)所以每个人仍然可以使用相同的端点。如果它们碰巧供应国家/地区,那么它们将被反序列化为您的新模型。如果他们不提供国家/地区,则不会设置 属性。
然后由您根据是否提供该数据来决定要做什么。
如您所料,这是根据我自己的经验得出的粗略答案。
您的情况可能(很可能)比问题所表达的更复杂,但希望这能提供一些帮助。