Web services Uri设计聚合

Web services Uri设计聚合,web-services,rest,uri,restful-url,url-design,Web Services,Rest,Uri,Restful Url,Url Design,我正在设计一个灵活的web服务来聚合数据 如果我们以销售为例。销售资源具有以下属性: 销售人员 产品 价格 顾客 身份证 系 日期 等等 因此,访问sales的基本URI类似于以下内容: api/sales/{id} 我需要设计URI以满足以下要求: 一个部门的总销售额 一个人的产品销售总数 月 因此,有三个基本要求。对结果进行分组、筛选和选择(类似于分组依据、位置和选择) 如何设计URI?我真正的问题是如何设计分组。以下是我一直在考虑的一些想法: 保留当前URI设计,但添加其他参数: 例

我正在设计一个灵活的web服务来聚合数据

如果我们以销售为例。销售资源具有以下属性:

  • 销售人员
  • 产品
  • 价格
  • 顾客
  • 身份证
  • 日期
  • 等等
因此,访问sales的基本URI类似于以下内容:

api/sales/{id}
我需要设计URI以满足以下要求:

  • 一个部门的总销售额
  • 一个人的产品销售总数
  • 因此,有三个基本要求。对结果进行分组、筛选和选择(类似于分组依据、位置和选择)

    如何设计URI?我真正的问题是如何设计分组。以下是我一直在考虑的一些想法:

  • 保留当前URI设计,但添加其他参数:

    例如

  • 新URI:

    /api/sales-aggregator?groupby=department&groupby=customer
    
  • 包括分组作为路径的一部分:

    /api/sales-aggregator/department/customer
    
    但部门和客户的顺序是任意的

  • 替代路径解决方案

    /api/销售聚合器;groupby=部门,groupby=客户


  • 建议?

    我会使用3或4,并进行一些修改

    GROUP BY语句与聚合一起使用 函数按一列或多列对结果集进行分组

    SQL按语法分组

    SELECT column_name, aggregate_function(column_name)
    FROM table_name
    WHERE column_name operator value
    GROUP BY column_name;
    
    如果您需要一些通用的解决方案,因此会有很多不同的解决方案,那么使用
    聚合器
    就可以了。如果您想将它与GET一起使用,那么我认为
    aggregation
    将是一个更好的词。使用POST时,可以使用
    聚合器

    如果链接不必满足一般用途,则应将聚合重命名为特定的名称,该名称描述聚合函数或查询的结果(如果使用多个聚合函数)。例如
    GET/api/sales person:123/sales count
    GET/api/sales count?sales person=123

    在单个响应中返回聚合和聚合函数使用的项的另一个选项

    GET /api/sales/?sales-person=123 -> 200 ok
    {
        count: 123,
        total: {
            value: 1234567,
            currency: "USD"
        },
        sales: [
            {
                id: 1,
                price: {value: 34556, currency: "USD"},
                ...
                links: {self: {href: "/api/sales/1"}}
            },
            ...
        ]
    }
    

    如果要在表示中启用/禁用聚合、项属性等,可以使用此选项。(如果您使用此选项,请不要忘记添加首选项,否则缓存控件将无法正常工作。)

    我将使用经过一些修改的3或4

    GROUP BY语句与聚合一起使用 函数按一列或多列对结果集进行分组

    SQL按语法分组

    SELECT column_name, aggregate_function(column_name)
    FROM table_name
    WHERE column_name operator value
    GROUP BY column_name;
    
    如果您需要一些通用的解决方案,因此会有很多不同的解决方案,那么使用
    聚合器
    就可以了。如果您想将它与GET一起使用,那么我认为
    aggregation
    将是一个更好的词。使用POST时,可以使用
    聚合器

    如果链接不必满足一般用途,则应将聚合重命名为特定的名称,该名称描述聚合函数或查询的结果(如果使用多个聚合函数)。例如
    GET/api/sales person:123/sales count
    GET/api/sales count?sales person=123

    在单个响应中返回聚合和聚合函数使用的项的另一个选项

    GET /api/sales/?sales-person=123 -> 200 ok
    {
        count: 123,
        total: {
            value: 1234567,
            currency: "USD"
        },
        sales: [
            {
                id: 1,
                price: {value: 34556, currency: "USD"},
                ...
                links: {self: {href: "/api/sales/1"}}
            },
            ...
        ]
    }
    

    如果要在表示中启用/禁用聚合、项属性等,可以使用此选项。(如果使用此选项,请不要忘记添加首选项,否则缓存控件将无法正常工作。)

    我将为统计数据创建单独的专用端点。我将为统计数据创建单独的专用端点。