2017-04-10 81 views
1

引用該API教程/解釋: https://thinkster.io/tutorials/design-a-robust-json-api/getting-and-setting-user-data爲什麼使用DELETE/POST而不是PUT來取消/關注用戶?

本教程解釋說,以「遵循用戶,你可以使用:

POST /api/profiles/:username/follow

爲了 '取消關注用戶',你可以使用:

DELETE /api/profiles/:username/follow

用戶簡介最初擁有字段"following": false

我不明白爲什麼「後續」字段正在創建/刪除(POST/DELETE)而不是從true更新爲false。我覺得好像我沒有掌握實際發生的事情 - 我們是不是簡單地在truefalse之間切換「跟隨」的值?

謝謝!

回答

0

我認爲數據庫層必須以稍微複雜的方式實現,而不僅僅是爲「後續」設置布爾列。

鑑於您有三個用戶,那麼這意味着其中一個用戶有"following": true?該用戶是否遵循某些規定?這並不意味着用戶正在關注所有其他用戶,對吧?

數據庫層可能包含(至少)兩個不同的概念:用戶和關注;用戶包含有關用戶的信息,以下內容指定用戶之間的相互關係。

說,我們有兩個用戶:

[ 
    {"username": "jake"}, 
    {"username": "jane"} 
] 

而我們想說的是,簡傑克之後,而不是周圍的其他方法。

然後我們需要一些東西來表示這個概念。我們稱之爲:

{"follower": "jane", "followee": "jake"} 

當API談論創建或刪除以下內容時,這可能是他們想象得到的。這就是爲什麼他們使用POST/DELETE而不是PUT。他們不修改用戶對象,他們創建代表以下內容的其他對象。

他們在JSON API響應有"following": true/false一部分的原因是因爲當你詢問有關特定用戶信息,其他用戶一個,你要知道,如果你作爲一個用戶遵循特定的用戶。

因此,考慮到上面的例子中,當簡會詢問有關傑克的信息,在GET /api/profiles/jake,她會收到這樣的事情:

{ 
    "profile": { 
    "username": "jake", 
    "bio": "...", 
    "image": "...", 
    "following": true 
    } 
} 

然而,當傑克會詢問有關個人資料信息簡,而不是他會得到這樣的迴應:

{ 
    "profile": { 
    "username": "jane", 
    "bio": "...", 
    "image": "...", 
    "following": false 
    } 
} 

因此,信息他們列出的API響應是不是有什麼實際存儲在數據庫中有關此特定的用戶,它也包含3 ns根據誰問的問題計算出一些信息。

+1

數據庫層應與API的設計注意事項無關。 POST/DELETE與PUT的語義只與API層相關。 –

+0

我同意。我只是以此爲例,也許這是一個笨拙的例子。在這種情況下,「跟隨」與「用戶檔案」是分離的概念,這當然也是鏈接的例子試圖告訴我們的。這個問題問我們是否不只是切換一個布爾值。這給了我一個想法,試圖解釋一個原因,爲什麼他們所說的下列內容是被創建/刪除的,而不是爲什麼在提出請求之前和之後配置文件的響應看起來會不一樣。 – Frost

0

使用microPUT肯定是一個合理的選擇。我不認爲有人會告訴你爲什麼隨機的API教程會做出某些設計決定。這可能是他們只需要一個人爲的例子來使用POST/DELETE。

除非作者看到這個問題,否則我認爲這是無法回答的。可以想象,他們想要存儲元信息,比如跟隨狀態改變的時間戳,但是這不會受POST/DELETE和PUT的影響。

相關問題