这是一个关于web api设计的问题。假设我有一个返回城市和城市属性的方法,例如人口、FIPS 代码和区域。还有更多属性,通常有 20 多个。
在某些情况下,我会提交 FIPS 代码并期望返回城市名称。其他时候,我会提交 FIPS 代码并期望返回一些其他属性(可能是地区和人口)。
我的问题是,我应该如何为这些场景构建我的 Controller 和操作?我应该有一个名为 City 的 Controller 和一系列方法来准确返回我需要的内容,还是应该使用多个 Controller ?
我对网络 API 设计还很陌生,但使用单个 Controller 感觉更简洁。我的想法是一个 Controller ,名为 City,具有适当命名的操作,如 GetNameAndPopulationFromFipsCode() 或类似的东西。
最佳答案
资源是相同的,所以实际上它通常是相同的 Controller 。
我看到了 2 种自然的实现方式:
- 内容协商
- 客户端传递可选参数以获取完整的 View 模型
考虑到当前 Web API 中基于 key 的连接,First 更符合 REST 风格,但可能会有点麻烦。
第二个更容易实现:
// almost pseudocode !!
// called by /api/City/123?extended=true
public City Get(int id, bool? extended)
{
ExtendedCity city = GetCity(id);
return extended.HasValue && extended.Value ? MapTo(city) : city;
}
// ----
public class City
{
...
}
public class ExtendedCity : City
{
...
}
更新
正如@Darrel 所指出的,查询字符串参数会更改资源。 但就资源组织而言,它保持层次结构,这就是首选方法的原因。
关于c# - 我应该创建多个 Controller 还是具有多个操作的单个 Controller 来处理更详细的响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14678383/