【问题标题】:Questions on WebAPI REST API design (tabled data & filter view)Web API REST API 设计问题(表格数据和过滤视图)
【发布时间】:2014-12-02 17:57:06
【问题描述】:

我是 RESTful API 设计的新手,现在我遇到了一个关于如何设计我的 API 的简单问题。

假设一家公司正在全球范围内提供服务,我想生成报告以向 CEO 展示我们服务的趋势,以及有多少客户正在使用我们的服务。

报告将在 UI 上显示 3 个表格:

表 1:全球每周总客户数,有 2 列:

WeekNo., TotalCustomersCount

表 2:每个地理区域的客户总数,有 3 列:

Region, WeekNo. TotalCustomersCount

表 3:每种服务类型的客户总数,也有 3 列:

ServiceType, WeekNo. TotalCustomersCount

我的问题是,我应该如何设计我的 API?我不想将表 1、2 和 3 视为不同的资源,因为显然所有这些表都是同一个数据库表上的过滤视图。

================================================ ====================================

我的一个想法是这样设计API,但我不确定这是否正确:

首先,将表1视为资源;

然后,定义~/api/totalaccounts的返回结果实体:

public class PivotedTotalCustomers
{
    public string Pivot {get;set;} //if empty or null, means no pivot, which is table 1.
    public uint WeekNo {get; set;}
    public uint TotalCustomersCount {get;set;}
}

最后,API 模板:

/api/{controller}/{pivot},pivot 是可选的,所以 API 看起来像:

~/api/totalcustomers/
~/api/totalcustomers/region
~/api/totalcustomers/servicetype

控制器中的方法:

public IQueryable<PivotedTotalCustomers> GetAllCustomers();
public IQueryable<PivotedTotalCustomers> GetPivotedAllCustomers(string pivot);

【问题讨论】:

  • 它们是否都返回与同一集合中相同的数据类型
  • @christiandev 是的,请参考我的补充。

标签: asp.net rest


【解决方案1】:

如果您使用的是最新版本 2.x,那么您可以使用如下所示的路由属性:

[Route("api/getallcustomers")]
public IQueryable<PivotedTotalCustomers> GetAllCustomers();

你也可以在Route上设置顺序,看看我的一个老问题Multiple GET's in Web API calling wrong action

但是,如果您使用的是旧版本的 Web API,则需要使用第三方库 AttributeRouting(MS 已在最新版本中实际实现了该库)。我上面的问题将进一步帮助属性路由。

也可以使用配置路由,可以看这篇文章Routing in ASP.NET Web API

【讨论】:

  • 谢谢@christiandev。实际上我的问题并不是关于 webapi 路由的具体问题,我想在这种情况下问,设计 RESTful API 的实践指南是什么,什么可以被视为资源?我应该为每个表创建 3 个资源和 3 个控制器,还是使用一个资源 + 查询参数?
  • 由于底层资源相同,只创建一个IMO
猜你喜欢
  • 1970-01-01
  • 2021-08-14
  • 1970-01-01
  • 2016-07-09
  • 1970-01-01
  • 2019-01-14
  • 1970-01-01
  • 2019-09-20
  • 1970-01-01
相关资源
最近更新 更多