Web サービス プロバイダーのサーバーがhttp://example.com:8000/apiの形式で Web サービスを公開しているとします。
iOS 7プロジェクトでWebサービスにアクセスするのに最適なフレームワークまたはライブラリは何ですか?
Web サービス プロバイダーのサーバーがhttp://example.com:8000/apiの形式で Web サービスを公開しているとします。
iOS 7プロジェクトでWebサービスにアクセスするのに最適なフレームワークまたはライブラリは何ですか?
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);
}
}];
}