2013-03-11 102 views
8

林有一個問題,我不能決定如何處理這件事情..我需要知道是否有任何標準的方法來解決這個問題..或者如果你們有任何偉大的投入這個問題。REST API,具有關係的POST實體?

的事情是,我已經開始建立學習的目的很基本的API 的API是一個簡單的音樂商店..在店裏有哪些需要一些專輯和藝術家。

所以關係是藝術家< --- 1 ----- * --->專輯和專輯存在它的要求,該專輯有一個藝術家。但藝術家不需要和專輯。

現在的問題...

由於這種關係,如果我想創建一個新的專輯。我不得不發佈專輯數據..和整個ARIST-data..not只是這位藝術家的ID ......但是整個藝術家......如果你問我,這看起來效果不是很好......因爲這樣做是不必要的。

所以當我看到它有兩種方法來解決這個問題... 要麼我只是發佈整個專輯數據/對象,並允許對象的藝術家數據只包含一個ID然後引用藝術家。

所以不是發帖:

{ 
"Name":"AlbumName", 
"Description":"Some description for the album", 
"ReleaseYear": "1992", 
"Artist" { 
    "Name":"Some artist", 
    "Id":"12345", 
    "Biography":"Lorem ipsum dolor sit amet" 
    } 
} 

我這樣做:

{ 
    "Name":"AlbumName", 
    "Description":"Some description for the album", 
    "ReleaseYear": "1992", 
    "Artist" { 
     "Id":"12345" 
     } 
    } 

期權數量二是實際上有一個路徑/ URL那具體該... 例如: /api/artist/{artistid}/album 然後只需發佈一個專輯對象到那個url ..

但是正如我所說.. Im r最後不知道這裏的對錯是什麼......或者是否有任何標準的處理方法?

在此先感謝!

回答

6

我會建議這樣的事情。

POST /musicstore/artist/343/albums 

{ 
    "Name":"AlbumName", 
    "Description":"Some description for the album", 
    "ReleaseYear": "1992", 
} 

創建資源作爲藝術家專輯集合的孩子的行爲343隱含地創建了藝術家和專輯之間的關係。沒有必要在有效載荷中指定它。

+0

可能是在這裏的話題..但你怎麼會這樣做在ASP.net web-api?..因爲爲每個這樣的路線定義一個新的路線將創建一個巨大的代碼行數量.. – Inx 2013-03-11 15:16:19

+0

什麼關於多對多資源?路徑中是否應該包含兩個唯一的ID,或者兩者中的一個是否在車身載荷中? – Stephane 2014-09-16 19:44:51

+0

@StephaneEybert無論是會工作。我更喜歡後者。根據您的環境,這個http://tools.ietf.org/id/draft-snell-link-method-01.html也可能會很有趣。 – 2014-09-16 20:17:10

0

我認爲這兩個選項都是正確的,它取決於你使用哪一個。第二個更像是HATEOAS