BETA

Alamofireから移行して感じたMoyaのいいところ

投稿日:2019-09-18
最終更新:2019-09-23

はじめに

Frickrから画像を取得し表示するアプリを個人で開発しています。そのアプリをAlamofireからMoyaに移行しました。その時に感じたMoyaの悪いところと良いところをまとめます。

Alamofireを使った場合とMoyaを使った場合の違い

Frickrから写真を検索する部分を取り上げます。

Alamofireを使った場合

URLを生成→request→response.resultの値に応じたcallback呼び出し
をしています。

    func fetch(keyword: String, with completion: @escaping (Result<[PhotoViewData]>) -> Void) {  
        let url = "https://api.flickr.com/services/rest/?api_key=\(API_KEY)&method=flickr.photos.search&text=\(keyword.urlEncoded)&format=json&nojsoncallback=1&sort=interestingness-desc"  
        Alamofire.request(url).responseJSON { response in  
            switch response.result {  
            case .success:  
                let response = try! JSONDecoder().decode(PhotosResponse.self, from: response.data!)  
                let photoViewDataArray = Array.init(response.photos.photo, keyword: keyword)  
                completion(.success(photoViewDataArray))  
            case .failure(let error):  
                completion(.failure(error))  
            }  
        }  
    }  

Moyaを使った場合

MoyaProviderを生成→request→response.resultの値に応じたcallback呼び出し
をしています。
URLやクエリストリングの生成は、MoyaのTargetTypeを実装した別クラスで実施します。(省略)
この部分については、URLの生成処理がなくなり、スッキリしました。

    func fetch(keyword: String, with completion: @escaping (Result<[PhotoViewData]>) -> Void) {  
        MoyaProvider<Frickr>().request(.photos(query: keyword)) { result in  
            switch result {  
            case .success(let response):  
                do {  
                    let photos = try response.map(FrickrResponse<FrickrPhoto>.self).photos.photo  
                    let photoViewDataArray = Array.init(frickrPhotos: photos, keyword: keyword)  
                    completion(.success(photoViewDataArray))  
                } catch {  
                    completion(.failure(error))  
                }  
            case .failure(let error):  
                completion(.failure(error))  
            }  
        }  
    }  

Moyaの悪いところ

  • ステップ数が増える

Moyaの良いところ

  • 上記の検索処理と、URL生成処理が分離され、見やすくなる
  • URLを修正する場合も、修正対象が限定される

以上

技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
駆け出しエンジニアからエキスパートまで全ての方々のアウトプットを歓迎しております!
or 外部アカウントで 登録 / ログイン する
クランチについてもっと詳しく

この記事が掲載されているブログ

@QN0f0F98EExCjypmの技術ブログ

よく一緒に読まれる記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう
目次をみる
技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
or 外部アカウントではじめる
10秒で技術ブログが作れます!