2011-04-16 42 views
2

您是否可以考慮我的REST API是否包含沒有參數值的查詢字符串?像這樣:查詢字符串和鍵值不相關

http://host/path/to/page?edit 
http://host/path/to/page?delete 
http://host/path/to/page/+commentId?reply 

相反例如:

http://host/api/edit?page=path/to/page 
http://host/api/delete?page=path/to/page 
http://host/api/reply?page=path/to/page&comment=commentId 

編輯:任何page-X?editpage-X?delete鏈接會觸發GET請求,但實際上不會編輯或刪除頁相反,他們展現。一個<form>的頁面,其中page-X可以編輯,或<form>一個真的刪除page-X? confiramtion對話框。實際的編輯/刪除請求將是POST或DELETE請求秒。以與host/api/edit?page=path/to/page相同的方式顯示編輯<form>的頁面。 /編輯。

Pleace指出,?action不是查詢字符串通常如何格式化。相反,他們通常被格式化,像這樣:?key=value;key2=v2;key3=v3

而且,有時我會使用網址,像這樣的:

http://host/path/to/page?delete;user=spammer 

也就是說,我會包括沒有值的查詢字符串參數(delete)並與值(user=spammer)(以刪除張貼的垃圾郵件發送者所有評論)一個參數

我的Web框架科佩斯罰款查詢字符串像?reply。所以我想我最想知道的是,你能想到任何客戶端問題嗎?或者有什麼問題,我是否應該決定使用其他Web框架? (你知道你使用的框架是否提供了沒有參數值的查詢字符串的信息嗎?)

(我從閱讀http://labs.apache.org/webarch/uri/rfc/rfc3986.html的理解是,我使用的查詢字符串格式很好,但對所有客戶端來說都有什麼影響,服務器框架無處不在)

(我目前使用的是Lift-Web框架,我也測試過Play Framework,並且有可能獲得無價值的查詢字符串參數,因此Play和Lift-Web似乎都是還好從我的觀點。)


這裏是一個相關問題關於沒有值的查詢字符串。但是,它與ASP.NET功能在某些情況下返回null優惠:Access Query string parameters with no values in ASP.NET

親切的問候,凱伊 - 馬格努斯

回答

4

查詢參數沒有任何價值都沒有問題,但把行動統一到的URI,特別是破壞性的,是。

您是否認真思考「寧靜」的設計,並讓GET成爲破壞性行爲?

+0

'?edit'查詢參數會導致出現一個頁面,帶有'

'的字段,因此您可以編輯該頁面。實際的編輯請求,當你點擊提交時,將是一個POST。 '?delete'查詢參數可能會顯示一個頁面,其中有一個對話框「刪除頁面X?「在''中,實際的刪除請求將是一個POST或者一個DELETE,所以''action'實際上不會做任何事情,只顯示可以提交表單的頁面(這是一個合理的設計你認爲?) - 我最好更新我的原始問題,以澄清'?delete'不會刪除。 – KajMagnus 2011-04-16 18:58:14

+0

啊。感謝您的澄清。現在它是有道理的 – 2011-04-16 19:17:55

+0

您的動機是...有點簡潔: - )「* [他們]沒問題*」呃,我會相信你,我會等一會兒,以防其他答案出現。 – KajMagnus 2011-04-17 11:21:18