RestKit を使用してかなり基本的な HTTP PUT を実行しようとしています。API 呼び出しは単一のクエリ パラメータを受け入れ、そのフィールドを更新するだけで設計されているため、オブジェクト全体を配置する必要はありません。これまでに2つのアプローチを試みましたが、どちらも失敗しました。
投稿先URL:https://myserver/api/users/{userId}
クエリ文字列パラメーター:verificationCode=
使用例:PUT https://myserver/api/users/101?verificationCode=646133
アプローチ #1: クエリ パラメーターを RKParams オブジェクトに入れ、それらのパラメーターを使用して PUT 呼び出しを行います。
NSString *putUrl = [NSString stringWithFormat:@"/api/users/%i", [APIUserInfo sharedAPIUserInfo].apiUserIdx];
NSLog(@"the PUT url is %@", putUrl);
// Send a PUT to a remote resource. The dictionary will be transparently
// converted into a URL encoded representation and sent along as the request body
NSDictionary* paramsDict = [NSDictionary dictionaryWithObject:[_verificationCode text] forKey:@"verificationCode"];
// Convert the NS Dictionary into Params
RKParams *params = [RKParams paramsWithDictionary:paramsDict];
[[RKClient sharedClient] put:putUrl params:params delegate:self];
アプローチ #2: URL 全体を作成し、params を nil に設定して PUT を試します。
NSString *putUrl = [NSString stringWithFormat:@"/api/users/%i?verificationCode=%@", [APIUserInfo sharedAPIUserInfo].apiUserIdx, [_verificationCode text]];
NSLog(@"the PUT url is %@", putUrl);
[[RKClient sharedClient] put:putUrl params:nil delegate:self];
どちらのアプローチも私にとってはうまくいきません。最初のエラーは、「RestKit は、リクエストに対して新しいボディ ストリームを再送信するように求められました。接続エラーまたは認証チャレンジの可能性がありますか?」と言って失敗します。その後、約 10 秒間実行されてタイムアウトになります。2 番目のアプローチは、HTTP ステータス 405 - メソッドが許可されていないと言って失敗します。
誰かが私が間違っている場所を指摘したり、RestKit を使用した簡単な PUT の例を提供したりできますか? そこで見つけた例のほとんどは、この場合はやりたくないオブジェクト全体を配置しています。
アップデート:
サーバー側でいくつかのことを整理すると、アプローチ#2がうまく機能しました。最終的解決:
NSString *putUrl = [NSString stringWithFormat:@"/api/users/verify/%i?verificationCode=%@", [APIUserInfo sharedAPIUserInfo].apiUserIdx, [_verificationCode text]];
NSLog(@"the PUT url is %@", putUrl);
[[RKClient sharedClient] put:putUrl params:nil delegate:self];