簡體   English   中英

Uri設計匯總

[英]Uri design aggregation

我正在設計一個靈活的Web服務來聚合數據。

如果我們以銷售為例。 銷售資源具有以下屬性:

  • 銷售人員
  • 產品
  • 價錢
  • 顧客
  • ID
  • 日期
  • 等等

因此,用於訪問銷售的基本URI類似於以下內容:

api/sales/{id}

我需要設計URI以滿足以下要求:

  1. 部門的銷售總數
  2. 產品某人的銷售總數

因此,三個基本要求。 對結果進行分組,過濾和選擇(類似於GROUP BY,WHERE和SELECT)。

如何設計URI? 對我而言,真正的問題是如何設計分組。 這是我一直在考慮的一些想法:

  1. 保留當前的URI設計,但添加其他參數:

    例如

     /api/sales?groupby=department&groupby=customer 
  2. 新的URI:

     /api/sales-aggregator?groupby=department&groupby=customer 
  3. 將分組包括為路徑的一部分:

     /api/sales-aggregator/department/customer 

    但是部門和客戶的順序是任意的。

  4. 替代路徑解決方案

    / API /銷售聚集; GROUPBY =部門,GROUPBY =客戶

建議?

我將使用3或4進行一些修改。

GROUP BY語句與聚合函數結合使用,以按一個或多個列對結果集進行分組。

SQL GROUP BY語法

 SELECT column_name, aggregate_function(column_name) FROM table_name WHERE column_name operator value GROUP BY column_name; 

如果您需要一些通用的東西,那么會有很多不同的解決方案,那么可以使用aggregator詞。 如果您想將它與GET一起使用,那么我認為aggregation將是一個更好的詞。 使用POST可以使用aggregator

如果鏈接不必滿足一般目的,則應將aggregation重命名為特定的名稱,以描述聚合函數或查詢的結果(如果使用多個聚合函數)。 例如GET /api/sales-person:123/sales-countGET /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"}}
        },
        ...
    ]
}

如果要啟用/禁用表示中的聚合,項目屬性等,可以將其與首選項標題一起使用。 (如果您使用它,請不要忘記在“ variable”標題中添加偏好的樣式 ,否則緩存控件將無法正常工作。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM