2011-11-09 89 views
1

最近我在Rest架構中苦苦掙扎:p和我通常會提出很多問題。 假設我有一個名爲「user」的資源,並且該用戶可以擁有一個汽車列表。我試圖將該用戶和他的汽車列表一次插入到數據庫中。我知道我必須用POST HTTP動詞來做到這一點。但是,我將如何實現這一目標?我應該只發送一個帶有用戶標識和汽車列表的URL嗎?或者我應該使用「用戶」資源插入用戶,然後爲每輛汽車在名爲「car」的資源中調用POST URL?RestFul網絡服務和數據庫事務

第二種方法有問題。這個過程必須通過數據庫事務來實現。如果插入汽車時出現問題,我希望用戶不要在數據庫中註冊。

我知道restFul體系結構必須是無狀態的,那麼如何使用數據庫功能來實現這樣的事務呢?我知道我可以實現某種交易,但我希望它更自動化。

在此先感謝。

回答

0

根據您在前端和後端使用的語言以及您計劃發送此數據的方式,您可以採取多種方式來完成此操作。我會解決像這樣的問題,假設你使用PHP和MySQL:

  1. 準備好這些數據,所以像user=123&cars[]=1&cars[]=2&cars[]=3(我使用var cars[],因爲這將數組發送到PHP和你可以通過命名您的輸入字段爲cars[]
  2. 後給你的後端實現這一
  3. 後端然後將處理該用戶,並將其添加到數據庫中,如果他們不存在。
  4. 我將不得不與所示的線沿線的用戶和汽車,東西之間的關係的表:

    CREATE TABLE box_to_category( USER_ID INT(11)NOT NULL, car_id INT(11) NOT NULL );

  5. 在這個表我清除與該用戶相關聯的所有汽車,然後添加新的汽車張貼到後端(該user_id將在users表關聯到usercar_id將關聯到一個carcars表中)

這是一個簡單的設置。

+0

這種方法我知道該怎麼做:p。當然這是一個有效的答案。我想知道另一種方法,在哪裏你會發送每輛車的URL,所以你必須實施某種數據庫交易系統。 但是,既然你展示了這種方法,讓我問你一些事情。用這種方法,讓我們想象我們的用戶是某種阿拉伯酋長,他有很多汽車。如果是這種情況,你最終可能會建立一個太大而無法正確發送的URL?由於這是一種POST方法,因此解決方案是增加服務器中的POST MAX SIZE?如果這是一個GET請求? –

+0

並用這種方法,是不可能發送一個對象編碼?比方說,我想發送汽車,併發送他們的身份證和姓名。你會怎麼做?像carId [] = 1&carId [] = 2&carName []&carName []這樣的數組,並通過它們的索引匹配兩個數組?或者有沒有辦法以某種方式發送對象編碼? –

+0

是的,你將不得不增加最大的帖子大小,我不會建議通過GET做到這一點。但是,PHP的最大發布大小默認爲8MB,這是一大堆文本。至於做它作爲一個編碼對象,是的,這也很好,無論適合你。國際海事組織我認爲最好在一次呼叫中完成,這樣可以節省1000輛汽車,而不是爲用戶和每輛汽車撥打1和1000次呼叫。 –