1

Web サービス プロバイダーのサーバーがhttp://example.com:8000/apiの形式で Web サービスを公開しているとします。

iOS 7プロジェクトでWebサービスにアクセスするのに最適なフレームワークまたはライブラリは何ですか?

4

1 に答える 1

0

XML からのオブジェクト グラフの生成をサポートするマーシャリング フレームワークはいくつかありますが、私は単純に次のようにします。

  • サービス エンドポイントを呼び出します。私のお気に入りのライブラリは BBHTTP ですが、AFNetworking や NSURLConnection を gcd で使用したり、非同期ネットワーク呼び出しに使用したいものを使用したりできます。
  • RaptureXMLを使用して、ユースケース固有のペイロード オブジェクトに XML ペイロードの関連コンテンツを抽出します。

特定のサービス呼び出しに必要なものを正確にモデル化するため、ユースケース固有のペイロード オブジェクトを用意することをお勧めします。つまり、 contract-first developmentの概念をサポートします。これにより、外部システムへの統合に影響を与えることなく、内部モデルを変更できます。同様に、モデルに影響を与えずに外部 API を変更できます。

RXMLElement にカテゴリ メソッドを作成して、ユースケース固有のオブジェクトにマップされた要素を返すことができます。典型的なマッピングでは、通常、数行のコードを使用して、ワイヤ形式からサービス呼び出し用のペイロード オブジェクトにマーシャリングします。

以下に例を示します (私が取得したコードでは、SOAP エンベロープでラップされたペイロードが必要でした。そのビットは無視してください)。

- (void)request:(MyUseCaseRequstPayload*)request onComplete:(void (^)(MyResponsePayload*))onSuccess
        onError:(void (^)(NSError*))onError;
{
    //Even more XML! You can stick your payload inside an envelope if you want
    SoapEnvelope* envelope = [SoapEnvelope envelopeWithContent:[request xmlString]];

    [[BBHTTPRequest postToURL:_serviceUrl data:[envelope data] contentType:@"text/xml"] execute:^(BBHTTPResponse* response)
    {
        RXMLElement* element = [RXMLElement elementFromXMLData:[response content]];
        MyResponsePayload* response = [[element child:@"elementToBeMapped"] asMyObjectType];
        if (onSuccess)
        {
            onSuccess(response);
        }

    } error:^(NSError* error)
    {
        LogDebug(@"Got error: %@", error);
        if (onError)
        {
            onError(error);
        }
    }];
}
于 2013-10-31T02:04:34.193 に答える