2012-11-21 40 views
0

我正在開發一個API,我需要返回資源/實體等。如何表示一個資源的寧靜表示及其相應的集合?

實施例:

GET /articles?limit=20&page=5取出與20項的範圍集合。

GET /articles/25取一個獨一無二的標識項。

基本上,我會分別代表這些資源是這樣的:

集合:

[ 
    { 
    "id": 12, 
    "title": "foo" 
    }, 
    { 
    "id": 25, 
    "title": "bar" 
    } 
] 

一個獨特的項目:

{ 
    "id": 25, 
    "title": "baz" 
} 

這聽起來自然。

但是,如果我想包含分頁數據呢?

在收集,我可以這樣做:

{ 
    "collection": [ 
    { 
     "id": 12, 
     "title": "foo" 
    }, 
    { 
     "id": 25, 
     "title": "bar" 
    } 
    ], 
    "pagination": { 
    "item_count": 2, 
    "page": 5, 
    "limit": 20, 
    "total": 102 
    } 
} 

獨特的項目可以保留原樣,但它看起來有點不一致對我來說,消費者可以怎樣,檢測收集VS的獨特項目?他需要檢查「收集」鍵嗎?

我有這個想法是 「型」 我的結果,是這樣的:

對於單個項目:

{ 
    "type": "item", 
    "model": "article", 
    "resultKey": "article", 
    "article": { 
    "id": 25, 
    "title": "baz" 
    } 
} 

對於集合:

{ 
    "type": "collection", 
    "model": "article", 
    "resultKey": "articles", 
    "articles": [ 
    { 
     "id": 12, 
     "title": "foo" 
    }, 
    { 
     "id": 25, 
     "title": "bar" 
    } 
    ], 
    "pagination": { 
    "item_count": 2, 
    "page": 5, 
    "limit": 20, 
    "total": 102 
    } 
} 

我連簡化關鍵的東西,通常使用像collectionitem

一些策略建議總是使用集合並返回單個項目,但對我來說聽起來並不自然,我請求一個返回實體的端點,除了僅看到一個集合,即使只有一個項目,我也不會看到集合。

是否有任何規範化的JSON模式來解決這個問題?

回答

0

我通常不會使用pagination項目。我實際上添加了相應的鏈接relHere is the list of rels

有一個Collection+JSONmedia-type

有一個標準RFC 6573

遵循這些約定,您將堅持使用HATEOAS,因此應用程序與客戶端分離。

+0

我知道這個規範,我很樂意使用它,但由於幾個原因,我不能,其中之一是,鏈接提供導航,但不是總項目數,例如,我的客戶需要能夠顯示總項目數量。 –

相關問題