Help us understand the problem. What is going on with this article?

Swiftで「サクッと使える」通信ライブラリ【RapidFire】

More than 3 years have passed since last update.

はじめに

業務でのアプリ開発で通信が必要な場合は、AlamofireやAPIKitもしくはURLSessionをラップした自前のライブラリ的なものを使っているかと思います。

私も業務ではAlamofireかAPIKitを使っています。

これらのライブラリは、URLSessionの煩雑さや、不足している機能を補ってくれる素晴らしいライブラリだと思うのですが、 プロトタイピング勉強がてらに書くコード(通信は必要だがメインではない)向けに、 もっとカジュアルに使える 通信ライブラリが欲しいなと思っていました。

今さら通信ライブラリっていうのも、いわゆる「車輪」な感じなのですが、「RetroFitのBulderみたく書けるとカッコいいかもしれない」とか「用途が違うので大御所とはかぶらない」という理由を見つけたので、思い切ってつくってみました。

RapidFire

できたのが こちらの RapidFire です。

こんな風に使います。

RapidFire(.get, "https://httpbin.org/get")
    .setCompletionHandler({ (response: RapidFire.Response) in
        switch response.result {
        case .success:
            print("success: \(response.statusCode): \(response.toDictionary())")
        case .failure:
            print("error: \(response.statusCode): \(response.error)")
        }
    })
    .fire()

詳しくは README を見ていただければと思いますが、メソッドチェーンでリクエストの設定を組み立てていきます。

対応している機能はこちらです。

  • GET / POST / PUT / PATCH / DELETE
  • URL / JSON Parameter Encoding
  • multipart/form-data
  • JSON to Array / JSON to Dictionary Helper Method

レスポンスは、URLSessionのData, URLResponse, Errorの他に、成功/失敗のEnumとステータスコードが返ってきます。

public enum Result {
    case success
    case failure
}

public var result:     Result
public var statusCode: Int?
public var data:       Data?
public var response:   URLResponse?
public var error:      Error?

また現状レスポンス形式としてはJSONが主流なので、

  • JSON to Dictionary
  • JSON to Array
  • JSON to String

の変換用ヘルパーメソッドも用意してあります。

サンプルのように書けば、サクッとレスポンスの中身を確認できます。

まとめ

Elegant(Alamofire)とも Type-safe(APIKit)とも 違いますが、 Easy to use な感じで、目論み通り「カジュアルに使える」ものができたと思っています。

プロトタイピングの他にもAPIマッシュアップが捗りそうでし、小難しいことを考えなくていい個人アプリの通信部分など、何かと活躍しそうなライブラリです。

また、久しぶりに素のURLSessionをさわって、その手間のかかり具合に改めてライブラリの有難みを感じた開発でした。

リンク

  • RapidFire : Easy to use networking library in Swift.

  • Alamofire : Elegant HTTP Networking in Swift

  • APIKit : Type-safe networking abstraction layer that associates request type with response type.

こぼれ話

開発途中に "Star" が付いて驚きました。Githubには上げていましが、ブランチは develop しかない状態だったので。

keygx
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした