c# - 我应该创建多个 Controller 还是具有多个操作的单个 Controller 来处理更详细的响应?

标签 c# asp.net-web-api

这是一个关于web api设计的问题。假设我有一个返回城市和城市属性的方法,例如人口、FIPS 代码和区域。还有更多属性,通常有 20 多个。

在某些情况下,我会提交 FIPS 代码并期望返回城市名称。其他时候,我会提交 FIPS 代码并期望返回一些其他属性(可能是地区和人口)。

我的问题是,我应该如何为这些场景构建我的 Controller 和操作?我应该有一个名为 City 的 Controller 和一系列方法来准确返回我需要的内容,还是应该使用多个 Controller ?

我对网络 API 设计还很陌生,但使用单个 Controller 感觉更简洁。我的想法是一个 Controller ,名为 City,具有适当命名的操作,如 GetNameAndPopulationFromFipsCode() 或类似的东西。

最佳答案

资源是相同的,所以实际上它通常是相同的 Controller 。

我看到了 2 种自然的实现方式:

  1. 内容协商
  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/

相关文章:

c# - 在 C# Web Api 中反序列化 JSON 对象时如何绑定(bind)给定属性?

c# - treeView_selectedItemChanged 事件处理程序

c# - 如何从 XAML 中的静态成员引用属性?

asp.net - 如何使用 WebAPI 处理图像

json - AngularJS、MVC4、Web API、Json 反序列化 $ref

c# - AngularJs、WebAPI、JWT,带有(集成的)Windows 身份验证

c# - Watin Runscript No Wait

c# - 有条件的 AddWithValue 作为单行

c# - 从 winform 使用 URI 启动应用程序

asp.net-mvc - ASP.net MVC 4 WebApi 中的嵌套资源