
LupinusHTTP は直感的に扱いやすい事を目的にしたHTTPライブラリです。
NSURLSessionをベースにしているのでiOS7以降のみ対応です。
インストール
Cocoapodsからインストールできます。
使い方
基本的には以下の2ステップで送信と受信ができます。
-
でどこにリクエストするのかを決める。
- 返り値の
で
や
などどういう風にレスポンスを受け取るかを決める。
GET Request
http://httpbin.org/get?key=value にGETリクエストする例です
LupinusHTTPRequest *httpRequest = [LupinusHTTP request:LupinusMethodGET URL:@"http://httpbin.org/get" query:@{
@"key" : @"value"
}];
[httpRequest responseJSON:^(NSURLRequest *request, NSURLResponse *response, id JSON, NSError *error) {
NSLog(@"JSON = %@", JSON);
}];
レスポンスをどういう形式で受け取るかはどの
を呼ぶかによって決まります。送信する段階ではなく、受信する段階でJSONやテキストで受け取るのかを決定出来ます。両方で受け取ることも出来ます。
以下はJSONで受け取る場合です。
LupinusHTTPRequest *httpRequest = [LupinusHTTP request:LupinusMethodGET URL:@"http://httpbin.org/get"];
[httpRequest responseJSON:^(NSURLRequest *request, NSURLResponse *response, id JSON, NSError *error) {
NSLog(@"JSON = %@", JSON);// => JSON Object(NSDictionary or NSArray)
}];
普通にNSStringで受け取る事もできます。
LupinusHTTPRequest *httpRequest = [LupinusHTTP request:LupinusMethodGET URL:@"http://httpbin.org/get"];
[httpRequest responseString:^(NSURLRequest *request, NSURLResponse *response, NSString *string, NSError *error) {
NSLog(@"string = %@", string);// => NSString
}];
POSTリクエスト
POSTリクエストも送ることが出来ます。
e.g) http://httpbin.org/post?key=value
body
[1,2,3]
bodyの中身は自動でJSONシリアライズして送信されます。
[LupinusHTTP request:LupinusMethodPOST URL:@"http://httpbin.org/post" query:@{
@"key" : @"value"
} body:@[@1, @2, @3]];
[httpRequest responseJSON:^(NSURLRequest *request, NSURLResponse *response, id JSON, NSError *error) {
NSLog(@"JSON = %@", JSON);// => JSON Object(NSDictionary or NSArray)
}];
GETやPOSTなどのレスポンスを受け取る共通の挙動としてresponse.statusCode >= 400 の時は自動的にerrorとなります。
コールバックのerrorに値が入った状態でレスポンスが帰ってきます。
LupinusHTTPRequest *httpRequest = [LupinusHTTP request:LupinusMethodGET URL:@"http://httpbin.org/status/403"];
// response status code is 403
[httpRequest responseJSON:^(NSURLRequest *request, NSURLResponse *response, id JSON, NSError *error) {
// error is not nil
if(error){
NSLog(@"%@", error);
}
}];
NSURLSessionでは
NSURLSessionConfiguration
をつけうことで独自のHTTPヘッダ等を付加することが出来ますが、LupinusHTTPRequestを呼ぶときにそれを渡すことが出来ます。
// default : [NSURLSessionConfiguration defaultSessionConfiguration]
+ (instancetype)httpWithSessionConfiguration:(NSURLSessionConfiguration *) sessionConfiguration;
リクエストのキャンセル
LupinusHTTPRequest#cancel
を呼ぶことで送信したリクエストをキャンセル出来ます。
この場合コールバックは呼ばれません。
LupinusHTTPRequest *httpRequest = [LupinusHTTP request:LupinusMethodGET URL:@"http://httpbin.org/get"];
[httpRequest responseJSON:^(NSURLRequest *request, NSURLResponse *response, id JSON, NSError *error) {
// this callback doens't call!
}];
// cancel request
[httpRequest cancel];
Swiftで書かれたAlamofireに影響を受けて作られているので似ている部分は多いです。
Credit
Photo by Tatu Väyrynen