私はAFNetworkingを使用しています。
通常は AFHTTPClient をサブクラス化しますが、ここに簡単な例を示します
AFHTTPClient *client = [[AFHTTPClient alloc] initWithBaseURL:baseURL];
[client registerHTTPOperationClass:[AFJSONRequestOperation class]];
[client setDefaultHeader:@"Accept" value:@"application/json"];
[client getPath:@"api1" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
[client getPath:@"api2" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
// Yay! success!!
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
// ERROR in API 2
}];
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
// ERROR in API 1
}];
セットアップを簡素化する AFHTTPClient のサブクラスの例。
@interface MyHTTPClient : AFHTTPClient
@end
@implementation MyHTTPClient
- (id)initWithBaseURL:(NSURL *)baseURL
{
self = [super initWithBaseURL:baseURL];
if (self) {
[self registerHTTPOperationClass:[AFJSONRequestOperation class]];
[self setDefaultHeader:@"Accept" value:@"application/json"];
}
return self;
}
@end
ビュー コントローラーで、操作クラスと Accept ヘッダーの設定をスキップします。
MyHTTPClient *client = [[MyHTTPClient alloc] initWithBaseURL:baseURL];
[client getPath:@"api1" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
[client getPath:@"api2" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
// Yay! success!!
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
// ERROR in API 2
}];
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
// ERROR in API 1
}];
セットアップを簡素化し、カスタム クライアント API を作成する例を次に示します。
typedef void (^MySuccess)(id JSON);
typedef void (^MyFailure)(NSError *error);
@interface MyJSONClient : AFHTTPClient
- (void)getJSONSuccess:(MySuccess)success failure:(MyFailure)failure;
@end
@implementation MyJSONClient
- (void)getJSONSuccess:(MySuccess)success failure:(MyFailure)failure
{
[self getPath:@"api1" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
[self getPath:@"api2" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
success(responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
failure(error);
}];
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
failure(error);
}];
}
- (id)initWithBaseURL:(NSURL *)baseURL
{
self = [super initWithBaseURL:baseURL];
if (self) {
[self registerHTTPOperationClass:[AFJSONRequestOperation class]];
[self setDefaultHeader:@"Accept" value:@"application/json"];
}
return self;
}
@end
ビュー コントローラーで、カスタム メソッドを使用します。
MyJSONClient *client = [[MyJSONClient alloc] initWithBaseURL:baseURL];
[client getJSONSuccess:^(id JSON) {
// Yay! success!!
} failure:^(NSError *error) {
// ERROR in API
}];