シエスタのload()
とloadIfNeeded()
がGET要求のためだけです。
なぜですか?これらのシエスタメソッドは、副作用がなく、結果をキャッシュすることができ、ゼロ、1回、または何度も呼び出すことが安全であるという前提で構築されています。 HTTPでは、これはGETの契約です。しかし、POST、PUTなどは、そのような約束をしないでください。それぞれの要求は別々の効果を持つことができ、繰り返しか任意に呼び出すのは危険です。
POST、PUTを使用して要求を作成し、DELETE、Resource.request(…)
を使用するには:
loginResource.request(.post)
(request(…)
がload(…)
の違いについての詳細はthe section on requests in the Siesta user guideを参照してください。)
されていない理由たとえば、リソースを「POSTリソース」にするという別の設定があります。これは、/foo
が論理的なものの名前であるリソースと、GET /foo
およびPUT /foo
は、異なるアクションを実行します.1つは状態を取得し、もう1つは状態を変更します。これは単なる審美的純粋さの問題ではない。 GETの強い約束はそれに密接に結びついています。
APIが完全に非REST型である場合、Siestaはそれに適していない可能性があります。ただし、REST形式のリクエストをAPI独自の構造に変換するNetworkProvider
を記述して、シエスタが本質的にREST APIとして扱うようにすることもできます。
APIは、通常、(withParam(…)
が何をするかである)クエリ文字列ではなく、むしろポスト本体にパスワードを取ることはありません。
(別の方法として、APIがクエリ文字列でパスワードを取得する場合は、そのようにしたくないかもしれませんが、クエリ文字列のパスワードは安全ではない場所(ログファイルなど)に漏れやすくなります。私はあなたがしばしばあなたが持っているものと仕事をしなければならないことを理解しています!あなたが本当にシエスタが結果をキャッシュしたい場合は
// 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])
:あなたのAPIが代わりにクエリ文字列のPOST本体にパスワードを取るん、あなたがこれを行うことができます可能性が高い場合には)
それはがGET要求されていたかのように、あなたのauthコールの、あなたがResource.load(using:)
使用することができます。
authResource.load(using:
authResource.request(
.post, json: ["user": user, "password": pass]))
をあなたがあなたを公開したい場合に便利です例えば、ResourceObserver
を使用してアプリ内の資格情報を認証することができます。より一般的な方法は、onSuccess
フックを使用して資格情報を一度取得してサービス設定を更新することですが、状況によってはload(using:)
が役立ちます。
まあ、大丈夫です。私はResource.request(..)を使用していると思うので、POST本体にログイン情報が必要ない場合は、私のapi開発者と話をします。本当に意味をなさない – blackwolf123333