読者です 読者をやめる 読者になる 読者になる

しめ鯖日記

swift, iPhoneアプリ開発, ruby on rails等のTipsや入門記事書いてます

Swift時代の定番通信ライブラリのAlamofireを使ってみる

定番ライブラリのAlamofireを試してみました。

github.com

CocoaPodsでのインストールは下の通りです。

use_frameworks!

pod 'Alamofire', '~> 2.0'

Carthageでのインストールは下の通りです。
折角対応しているので今回はCarthageでインストールしました。

github "Alamofire/Alamofire" ~> 2.0

JSONデータをGetで受け取る

JSONデータをGet通信で取得する方法は下の通りです。
requestメソッドでリクエストを送って、responseJSONでデータを取得しているようです。

import Alamofire

Alamofire.request(.GET, "https://httpbin.org/get", parameters: ["foo": "bar"]).responseJSON { response in
    print(response.request)  // original URL request
    print(response.response) // URL response
    print(response.result)   // result of response serialization
    
    if let JSON = result.value {
        print("JSON: \(JSON)")
    }
}

レスポンスをJSON以外で受け取る

レスポンスをJSON以外で受け取りたい場合はresponseJSONを別メソッドに置き換えます。
例えばStringとして受け取りたい場合はresponseStringを使います。
データはJSONの時と同様にresult.valueで受け取れます。

Alamofire.request(.GET, "https://httpbin.org/get", parameters: ["foo": "bar"]).responseString { response in
    if let str = response.result.value {
        print("JSON: \(str)")
    }
}

GET以外の通信

GET以外を使いたい場合は第一引数を入れ替えます。
OPTIONS, GET, HEAD, POST, PUT, PATCH, DELETE, TRACE, CONNECTの9種類を使えるようです。

Alamofire.request(.POST, "https://httpbin.org/post", parameters: ["foo": "bar"]).responseString { response in
    if let JSON = result.value {
        print("JSON: \(JSON)")
    }
}

headerに値をセットする

headerへの値のセットは下の通りです。

let headers = [
    "Authorization": "Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==",
    "Content-Type": "application/x-www-form-urlencoded"
]

Alamofire.request(.GET, "https://httpbin.org/get", headers: headers).responseJSON { response in
    debugPrint(response)
}

ファイルのアップロード

ファイルのアップロードにも対応しています。
アップロードをする場合はrequestメソッドの代わりにuploadを使います。

ダウンロードをしたい場合はrequestの代わりにdownloadを使うようです。

let fileURL = NSBundle.mainBundle().URLForResource("Default", withExtension: "png")!
Alamofire.upload(.POST, "https://httpbin.org/post", file: fileURL)

ベーシック認証

ベーシック認証にはauthenticateを使います。

let user = "user"
let password = "password"

Alamofire.request(.GET, "https://httpbin.org/basic-auth/\(user)/\(password)").authenticate(user: user, password: password).responseJSON { response in
    debugPrint(response)
}