Lupinus

LupinusHTTP は直感的に扱いやすい事を目的にしたHTTPライブラリです。

NSURLSessionをベースにしているのでiOS7以降のみ対応です。

インストール

Cocoapodsからインストールできます。

pod "LupinusHTTP"

使い方

基本的には以下の2ステップで送信と受信ができます。

  1. LupinusHTTPRequest でどこにリクエストするのかを決める。
  2. 返り値のLupinusHTTPresponseJSONresponseString などどういう風にレスポンスを受け取るかを決める。

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);
}];

レスポンスをどういう形式で受け取るかはどのresponse*を呼ぶかによって決まります。送信する段階ではなく、受信する段階で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

Tagged with:
 
Set your Twitter account name in your settings to use the TwitterBar Section.