私は、他のオブジェクトの中に含まれるサービス a を試みPOST
てREST
きました。私は他のサービスに対してこれを行ってきましたが、不思議なことにそれらのどれにも of が含まれていませんでした.しかし明らかにそうではありません。これは、送信する準備として元のオブジェクトを作成する方法です。JSON object
NSArray
NSDictionaries
NSArray
NSDictionaries
JSON
NSArray
NSDictionaries
myDict = [NSDictionary dictionaryWithObjectsAndKeys:@"NFS", @"ticket[serie]",@"123",@"ticket[someID]",[NSArray arrayWithObject:[NSDictionary dictionaryWithObjectsAndKeys:@"99SKU1", @"product_id",@"1",@"quantity",nil]],@"lineItems",nil];
次に、その辞書を NSData オブジェクトに変換して、送信する準備をしますURLConnection
。
if ([NSJSONSerialization isValidJSONObject:myDict])
{
myData = [NSJSONSerialization dataWithJSONObject:myDict options:0 error:&theErrorIfAny];
// Send to webservice (myData)
}
Rubyコードにはアクセスできませんが、サーバーがファイルに吐き出すログファイルにはアクセスできます。これは私が得たものです:
{"ticket[serie]"=>"NFS"
"ticket[someID]"=>"123"
"lineItems"=>[{"product_id"=>"99SKU1","quantity"=>"1"}]
"ticket"=>{}}
その余分な行を除いて、すべてが良さそう"ticket"=>{}
です。たとえば、余分な空の辞書でリクエストを満たしている場合などです。myDict の 1 つを除くすべてのアイテムを削除し、ネストされたNSArray
withも削除して、このリクエストを既に試しましたが、リクエストの最後NSDictionaries
にまだその"ticket"=>{}
行が表示されます。
ところで、Web サービスは Ruby で実行されており、直接アクセスすることはできません。私はこれについて人々にコメントすることができますが、彼らは肩をすくめて、ターミナルから curl -d を使用して同じ呼び出しを行うと、サーバーから正しい応答が得られると主張します。だから多分JSONSerialization
オブジェクトや私が私の呼び出しを作成している方法で何かですか?:
+ (NSURLConnection *)postRequest:(NSData *)dataRequest toServerURL:(NSString *)serverURL onPort:(int)port withTimeOut:(NSTimeInterval)timeOut charSet:(char *)charset withDelegate:(id<NSURLConnectionDelegate>)myDelegate toServiceNamed:(NSString *)serviceName {
NSString *postDataLength = [NSString stringWithFormat:@"%d", [dataRequest length]];
DebugLog(@"bytes to send:%@", postDataLength);
NSMutableURLRequest *postRequest;
if (port == 0)
{
postRequest = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@/%@", serverURL, serviceName]] cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:timeOut];
}
else
{
postRequest = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@:%d/%@", serverURL, port, serviceName]] cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:timeOut];
}
[postRequest setHTTPMethod:@"POST"];
[postRequest setValue:postDataLength forHTTPHeaderField:@"Content-Length"];
if (charset == nil || strcmp(charset, ""))
{
charset = "utf-8";
}
[postRequest setValue:[NSString stringWithFormat:@"application/json; charset=%s", charset] forHTTPHeaderField:@"Content-Type"];
[postRequest setHTTPBody:dataRequest];
return [[NSURLConnection alloc] initWithRequest:postRequest delegate:myDelegate];
}
実績のある知識源へのコメントやポイントは素晴らしいでしょう。