关于WebAPI REST API设计的问题(表格数据和过滤器视图)

问题描述:

我是RESTful API设计的新手,现在我遇到了一个关于如何设计API的简单问题。关于WebAPI REST API设计的问题(表格数据和过滤器视图)

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

报告将显示在UI 3个表:

表1:全球范围内的客户总数,每周数,它有2列:

WeekNo., TotalCustomersCount

表2:每地质客户总数-region,它有3列:

Region, WeekNo. TotalCustomersCount

表3:总的客户每个服务型,i T有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},支点是可选的,因此API的样子:

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

和控制器中的方法:

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

它们是否都返回与同一个集合中相同的* Data Type *? – christiandev 2014-12-02 09:06:18

+0

@christiandev是的,请参阅我的补充。 – codewarrior 2014-12-02 09:15:14

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

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

您还可以设置订单上的路线,看看老我的问题Multiple GET's in Web API calling wrong action。但是,如果您使用的是旧版本的Web API,那么您需要使用第三方库AttributeRouting(MS实际已在最新版本中实现)。上面的问题将有助于进一步进行属性路由。

您也可以使用配置路由,您可以在本文中看到Routing in ASP.NET Web API

+0

谢谢@christiandev。其实我的问题在webapi路由上并没有那么具体,在这种情况下,我想问一下,设计一个RESTful API的实践指南是什么,什么可以被视为资源?我应该为每个表创建3个资源和3个控制器,还是使用一个资源+查询参数? – codewarrior 2014-12-02 10:01:35

+0

由于底层资源是相同的,只需创建一个IMO – christiandev 2014-12-02 10:36:45

+0

@codewarrior,在这个问题上的任何喜悦? – christiandev 2014-12-03 09:05:20