我应该创建多个控制器还是一个具有多个操作的控制器来处理更详细的响应?

时间:2013-02-03 23:00:39

标签: c# asp.net-web-api

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

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

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

我对web api设计还不熟悉,但拥有一个控制器感觉更干净。我的想法是一个名为City的控制器,具有适当命名的动作,如GetNameAndPopulationFromFipsCode()或类似的东西。

1 个答案:

答案 0 :(得分:0)

资源是一样的,所以它通常是同一个控制器。

我看到了两种自然的方式来实现这个:

  1. 内容协商
  2. 客户端传递可选参数以获取完整视图模型
  3. 首先考虑更多RESTful,但考虑到Web API中当前基于密钥的连接,可能会有点痛苦。

    第二种更容易实现:

    // 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指出的那样,查询字符串参数会更改资源。 但在资源组织方面,它维护了层次结构,这就是首选方法的原因。