【发布时间】: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 是的,请参考我的补充。