0

wcf サービスからのリクエストをコーディングする方法に関するオンライン記事/チュートリアルを探しています。次の Web サービスをサーバーにアップロードしています。

[ServiceContract]
    public interface IUserAccountService
    {
        [OperationContract]
        [WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json, UriTemplate = "UserLogIn?id={email}&password={password}")]
        AuthenticationToken UserLogIn(string email, string password);
    }

私が見つけてきた記事やそれに関連するSOの質問に本当に混乱しています。

例えば:

  • -http://stackoverflow.com/questions/1557040/objective-c-best-way-to-access-rest-api-on-your-iphone

  • -http://stackoverflow.com/questions/8650296/nsjsonserialization-parsing-response-data

そしてついにこれに出くわしました:

http://iam.fahrni.ws/2011/10/16/objective-c-rest-and-json/

私の質問は、安らかなフレームワークを使用して API を呼び出す必要があるかどうかです。もしそうなら、 ASIHttpRequestまたはRestKitまたはAFNetworkingのどれがより推奨されますか? または、私が言及した最後のリンクを使用して、自分で簡単に行うことはできますか? どこから始めればよいか本当にわかりません。

御時間ありがとうございます。

4

1 に答える 1

1

NSURLConnection と NSJSONSerialization は正常に動作します。

編集: 簡潔にするために編集された、私のプロジェクトの 1 つからのサンプル コード。
fstr(...) は、[NSString stringWithFormat:...] の単なるラッパーです。
このコードは、GCD を使用してバックグラウンド スレッドで呼び出します。スレッドセーフではありません。

- (NSMutableURLRequest *)buildGetRequestHeaderWithMethod:(NSString *)method
{
  NSMutableURLRequest *request = [[NSMutableURLRequest alloc]
    initWithURL:[NSURL URLWithString:fstr(@"%@%@", self.url, method)]];
  [request setTimeoutInterval:10.0];
  [request setHTTPMethod:@"GET"];
  [request setValue:self.key forHTTPHeaderField:@"Authentication"];
  [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
  return request;
}

- (id)callMethod:(NSString *)method
{
  NSMutableURLRequest *request = [self buildGetRequestHeaderWithMethod:method];
  return [self sendRequest:request withMethod:method];
}

- (id)sendRequest:(NSMutableURLRequest *)request withMethod:(NSString *)method
{
  NSHTTPURLResponse *response = nil;
  NSError *error = nil;
  [state() pushNetworkActivity];
  NSData *result = [NSURLConnection sendSynchronousRequest:request
    returningResponse:&response error:&error];
  [state() popNetworkActivity];
  self.lastStatusCode = response.statusCode;
  // Bug in Cocoa. 401 status results in 0 status and NSError code -1012.
  if(error && [error code] == NSURLErrorUserCancelledAuthentication)
  {
    [self interpretHTTPError:401 URLError:error forMethod:method];
    self.lastStatusCode = 401;
    return nil;
  }
  if(response.statusCode != 200)
  {
    [self interpretHTTPError:response.statusCode URLError:error forMethod:method];
    return nil;
  }
  id jsonResult = [self parseJsonResult:result];
  debug(@"%@", jsonResult);
  return jsonResult;
}


- (void)interpretHTTPError:(int)statusCode URLError:(NSError *)urlError
  forMethod:(NSString *)method
{
  NSString *message = fstr(@"HTTP status: %d", statusCode);
  if(statusCode == 0)
    message = [urlError localizedDescription];

#ifdef DEBUG
    message = fstr(@"%@ (%@)", message, method);
#endif

  if(self.alertUserOfErrors)
  {
    dispatch_async(dispatch_get_main_queue(), ^{
      errorMessage (message);
    });
  }
  else
    debug(@"%@", message);
  self.lastErrorMessage = message;
}

- (id)parseJsonResult:(NSData *)result
{
  if( ! result)
    return nil;
  NSError *error = nil;
  id jsonResponse = [NSJSONSerialization JSONObjectWithData:result
    options:NSJSONReadingMutableContainers error:&error];
  if(error)
  {
    NSLog(@"JSONObjectWithData failed with error: %@\n", error);
    return nil;
  }
  return jsonResponse;
}
于 2013-01-14T06:59:34.230 に答える