3

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

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

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

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

4

1 回答 1

0

资源是相同的,所以实际上它通常是同一个控制器。

我看到了两种自然的方法来实现这一点:

  1. 内容协商
  2. 客户端传递一个可选参数以获取完整的视图模型

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

于 2013-02-04T11:03:23.620 回答