例如,我想從數據庫中搜索/插入/獲取/刪除數據,並且正在使用wcf RESTful服務。 我有一種從表中獲取數據的方法,一種用於在表中搜索的方法,一種用於在表中插入數據的方法以及一種用於從表中刪除數據的方法。與數據庫通信的最佳實踐 - POST或GET?
我知道所有這些方法都可以是POST或GET。
但是,什麼是最聰明的?最佳做法是什麼?
我的意見是,搜索和get方法應該是GET。插入和DELETE方法應該是POST。
我對不對?
例如,我想從數據庫中搜索/插入/獲取/刪除數據,並且正在使用wcf RESTful服務。 我有一種從表中獲取數據的方法,一種用於在表中搜索的方法,一種用於在表中插入數據的方法以及一種用於從表中刪除數據的方法。與數據庫通信的最佳實踐 - POST或GET?
我知道所有這些方法都可以是POST或GET。
但是,什麼是最聰明的?最佳做法是什麼?
我的意見是,搜索和get方法應該是GET。插入和DELETE方法應該是POST。
我對不對?
你說得對。關於GET的一點是它應該是冪等的,因爲客戶端(瀏覽器)可以隨時隨意發送重複GET。但是,POST只能發送一次(根據規則)。
因此,任何改變任何東西都可能是POST。嚴格地說,刪除也可以是GET,因爲GET的重發不會損害刪除,但通常最好是尊重HTTP協議的精神。有關更多詳細信息,請參見HTTP RFC 2616。
您的意思是這個帖子只能發送一次?我可以隨時調用我的刪除方法,對吧? – 2011-12-25 19:22:04
對不起,最多隻有一次。瀏覽器不會重新發送HTTP POST方法,如果它沒有得到響應或檢測到通信故障,它可能會重置GET方法。 – 2011-12-25 19:23:49
是的,這是公約。
對於更改數據或系統狀態的操作使用POST。使用GET進行不會改變任何內容的查詢。例如,
Rails通過同時使用PUT和DELETE增強了這一功能,但大多數網絡服務器都不支持這種功能(所以有一種解決方法)。
參考文獻:
是的,我知道有更多的選項比POST和GET,但我將它限制在這兩個:) – 2011-12-25 19:20:05
「'PUT'和'DELETE' [是]不支持大多數網絡服務器」 - * [引用需要] * – josh3736 2011-12-25 19:30:08
@ josh3736:引用添加 – 2011-12-25 19:40:11
Wiki has a good overview of the HTTP verbs and their use.
如果我是你,我會使用:
GET
搜索和獲取操作(因爲他們不會修改數據;它的安全,多次調用這些操作)
POST
的插入操作
DELETE
刪除操作
(IIS與DELETE
動詞沒有任何問題。)
而你並不是真正的'與數據庫溝通'。你的意思是'與網絡服務器通信',對吧? – 2011-12-25 19:20:21
@SergeiTulentsev不,我的意思是與數據庫進行通信,因爲我的方法都是用於處理來自數據庫的表。 – 2011-12-25 19:21:09
你的數據庫會說HTTP嗎? – 2011-12-25 19:22:09