午睡的load()
和loadIfNeeded()
僅用於GET請求。
爲什麼?這些Siesta方法建立在假設他們沒有副作用,他們的結果可以被緩存並且他們可以安全地調用零次,一次或多次的基礎上。在HTTP中,這是GET的合同。但是,POST,PUT等沒有做出這樣的承諾;每個請求可以具有單獨的效果,並且因此對於重複或可選地調用是危險的。
要使用POST,PUT提出請求,並刪除,使用Resource.request(…)
:(關於如何request(…)
從load(…)
不同,更多信息請參見the section on requests in the Siesta user guide)
loginResource.request(.post)
爲什麼不有一個單獨的設置,例如,使資源成爲「POST資源」?因爲REST方法是/foo
是邏輯事物的名稱 - 資源 - 和GET /foo
和PUT /foo
對它是不同的操作,一個檢索它的狀態和一個改變它的狀態。這不僅僅是一種審美純潔的問題, GET的強烈承諾與它密切相關。
如果您的API是完全非REST形狀的,Siesta可能不太適合它。但是,您也可以編寫一個NetworkProvider
,將REST形請求轉換爲API自己的結構,讓Siesta將其視爲REST API。
的API通常不採取密碼在查詢字符串(這是什麼withParam(…)
一樣),而是在後機身。例如,如果您的API確實在查詢字符串中輸入了密碼,那麼您可能不希望這樣做。查詢字符串中的密碼很容易泄露到不安全的地方 - 例如日誌文件,但您知道您的API ,我意識到你經常需要與你的工作一起工作!)
在你的API確實需要在POST身體,而不是查詢字符串密碼可能的情況下,你可以這樣做:
// If it’s a JSON request
loginResource.request(.post, json: ["user": user, "password": pass])
// If it an HTML form encoded request
loginResource.request(.post, urlEncoded: ["user": user, "password": pass])
如果你真的想午睡到緩存結果您AUTH通話,就好像它有是一個GET請求,您可以使用Resource.load(using:)
:
authResource.load(using:
authResource.request(
.post, json: ["user": user, "password": pass]))
這是有用的,如果你想發佈您例如,在應用程序中使用ResourceObserver
s驗證憑證。更常見的方法是使用onSuccess
鉤子來獲取憑證一次並更新服務配置,但load(using:)
在某些情況下可能是有用的替代方法。
嗯,好的。我想我會使用Resource.request(..),然後,如果他們不想在發佈主體中登錄信息,我還會與我的api開發人員交談。這確實更有意義。 – blackwolf123333