簡體   English   中英

是否可以通過兩種HTTP方法公開REST API?

[英]Is it ok for a REST api to be exposed via two HTTP methods?

問題是我們有一個復雜的搜索API查詢字符串,並希望讓用戶方便使用body。 所以我們想要允許GET和POST(或PUT)。

我理解將會有一個關於搜索是一個只讀操作的爭論,它應該只按照REST標准進行GET。 據我所知,PUT也不是緩存友好的。 但我也知道,有時可以偏離REST標准。 但為客戶提供方便,有兩種方法是否有意義?

直接使用POST查詢數據並不是一件好事,正是由於您提到的原因。 如果你的搜索字符串很復雜,也許你可以通過兩個步驟分割查詢過程來簡化事情 - 一個涉及POST ,另一個涉及直接GET

第一步使用POST創建查詢模板。 查詢字符串通過消息體發送,成為用戶可以通過GET查詢的新資源。 查詢字符串允許參數,類似於SQL查詢。 通過猜測您的查詢的外觀,這里有一個例子:

(userName = $name) || (createdBefore > $asOf && deleted=false)

您的用戶將在郵件正文中對其進行POST ,並獲取新的資源標識符。 此資源標識數據中的參數化“視圖”。 假設此視圖的資源ID為aabb02kjh 現在您的用戶可以像這樣查詢:

https://app.yourserver.net/aabb02kjh?name=airboss&asof=20140101

這為您的API增加了一些復雜性,但它允許用戶使用非常簡單和標准的查詢字符串來定義和重用查詢模板。

有趣的問題。 我的意思是POST - > PUT,DELETE有一些常用的替代HTTP方法的解決方法:

  • 使用發布數據發送_method隱藏輸入字段
  • 在URL中發送_method查詢參數
  • 發送帶有帖子的X-HTTP-Method-Override標頭

等等......所以如果它們有效(我不確定),那么你也可以通過GET使用相同的方法。

根據REST約束:緩存和統一接口以及HTTP方法定義,您必須通過檢索請求使用GET。 只有少數URL查詢語言可以使URL可讀,例如RQL,但您可以隨時選擇自己喜歡的查詢語言並將其序列化以用於URL使用...

另一種有趣的方法來添加有關URL的鏈接描述 (但這對我來說也是非常新的。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM