1. HTTP GET vs HTTP POST 也許,你會(huì)想起一個(gè)面試題。HTTP 請(qǐng)求的 GET 與 POST 方式有什么區(qū)別?
你可能會(huì)回答到:GET方式通過(guò)URL提交數(shù)據(jù),數(shù)據(jù)在URL中可以看到;POST 方式,數(shù)據(jù)放置在HTML HEADER內(nèi)提交。但是,我們現(xiàn)在從RESTful的資源角度來(lái)看待問(wèn)題,HTTP GET方法是冪等的,所以它適合作為查詢(xún)操作,HTTP POST 方法是非冪等的,所以用來(lái)表示新增操作。 但是,也有例外,我們有的時(shí)候可能需要把查詢(xún)方法改造成 HTTP POST 方法。比如,超長(zhǎng)(1k)的 GET URL 使用 POST 方法來(lái)替代,因?yàn)?GET 受到 URL 長(zhǎng)度的限制。雖然,它不符合冪等性,但是它是一種折中的方案。
2. HTTP POST vs HTTP PUT 對(duì)于 HTTP POST 方法和HTTP PUT方法,我們一般的理解是 POST 表示創(chuàng)建資源,PUT 表示更新資源。當(dāng)然,這個(gè)是正確的理解。 但是,實(shí)際上,兩個(gè)方法都用于創(chuàng)建資源,更為本質(zhì)的差別是在冪等性。HTTP POST方法是非冪等,所以用來(lái)表示創(chuàng)建資源,HTTP PUT方法是冪等的,因此表示更新資源更加貼切。
3. HTTP PUT vs HTTP PATCH此時(shí),你看會(huì)有另外一個(gè)問(wèn)題。HTTP PUT方法和HTTP PATCH方法,都是用來(lái)表述更新資源,它們之間有什么區(qū)別呢?我們一般的理解是 PUT表示更新全部資源,PATCH表示更新部分資源。首先,這個(gè)是我們遵守的準(zhǔn)則。根據(jù)上面的描述,PATCH方法是非冪等的,因此我們?cè)谠O(shè)計(jì)我們服務(wù)端的RESTful API的時(shí)候,也需要考慮。如果,我們想要明確的告訴調(diào)用者我們的資源是冪等的,我的設(shè)計(jì)更傾向于使用HTTP PUT方法。