iOS

Moya vs APIKit

投稿日:2019年11月5日 更新日:

はじめに

こんにちは。カイザーです。今回は、iOSでWebAPIクライアントを実装するときに使用できるライブラリである「Moya」と「APIKit」を比較して紹介したいと思います。
私は、普段APIKitを好んで使用しますが、Moyaの調査も兼ねて、比較したいと思います。

MoyaとAPIKitの概要

両者ともに、APIクライアントを実装するための、ラッパライブラリとなります。

Githubの比較

MoyaAPIKit
リポジトリオーナMoyaishikawa
Star数11.4k1.7k
Swift5.1(v14.0.0-betaで対応)5.0(5.0.0で対応)
コントリビュータ数18830

記事作成時点(2019年11月)では、このようになっています。初回コミット時期に大きな差はありませんが、Moyaの方がコントリビュータ数が多いです。
しかし、Code frequencyを見てみると、近年はどちらも大きな変更が加えられていないことが分かります。
記事作成時点では、どちらもメンテナンスされており、Swift 5に対応しています。

機能比較

MoyaAPIKit
リクエスト定義enum+extensionもしくはenum+structで、指定プロトコルに従って定義struct+extensionで、指定プロトコルに従って定義
レスポンスJSONパーサ標準でDecodableをサポート標準はDictionaryに変換されるが、プロトコル実装によりDecodableサポート可
ラップしている通信クラスAlamofireURLSession
Rx Extensionサポートなし
サンプルレスポンスサポートなし
依存ライブラリAlamofire
ReactiveMoya
ReactiveSwift
Result
RxAtomic
RxCocoa
RxMoya
RxRelay
RxSwift
Result

最も異なるのは、「ラップしている通信クラス」だと思います。MoyaはAlamofireをラップしているため、Alamofireの便利な機能や拡張を使用することができます。

また、Moyaは「サンプルレスポンス」も特徴的です。これは、実際に通信せずに、定義されたモックJSONを、コールバックするものです。UTやUIテストでのパターンもに使えそうです。

APIKitは、シンプルで軽量であることが特徴ですね。APIKitは最低限の機能しかありませんが、多くはプロトコル指向による設計となっているため、カスタマイズしやすくなっています。

Rxに依存したアーキテクチャを組み、自動テストにも取り組むつもりであれば、Moyaがおすすめですね。
一方で、スピード重視で最低限の機能を開発していきたい場合には、APIKitがおすすめです。

実装の比較

それでは、実装面を比較していきたいと思います。今回は、livedoor天気情報APIを使用して、東京の天気をログ出力してみます。

リクエスト定義

Moya

APIKit

基本的にどちらも定義プロパティは似ていますが、異なる点について紹介していきます。

  • 送信パラメータは、Moyaではenumの引数に設定するのに対し、APIKitではstructのプロパティとして設定します。
  • Moyaはenum caseをAPIの本数文増やし、extensionで分岐しながら定義していきますが、このままだと分岐だらけになってしまいます。そのため、APIKitのように、APIごとにstructで実装することも可能です。
  • Moyaではリクエスト定義時にレスポンス型は定義しませんが、APIKitではtypealiasで設定します。
  • APIKitはDecodableは標準でサポートされていないため、JSONDecoderを使用するDataParserを定義しています。

レスポンスstruct

Moya, APIKit共通

今回は、Moya, APIKit共にJSONDecoderを使用してパースするため、レスポンスstructの実装は共通となります。

リクエスト送信

Moya

APIKit

こちらも似ていますね。
Moyaは、responseに map(Decodable.Protocol)が実装されており、ここにDecodableの型を指定するだけで、パースされます。
このパース部分が隠蔽されていないことが気になりますが、ここがRxでチェインされるネットワーク層であれば、うまく隠蔽できると思います。
この点からも、MoyaはRxと組み合わせると強力になることが分かります。

出力結果

以下のような出力用関数を用意しました。

Moya, APIKit共に、以下のように出力されました。

さいごに

Swiftではプロトコルやジェネリクスのサポートが強力であるため、自前でも簡単にAPIクライアントを作成できます。しかし、実際に作ってみると、紹介したライブラリと同じような機能になることは多いのではないでしょうか?
そうであれば、MoyaやAPIKitの導入を検討してみても良いかもしれません。

おすすめ書籍

[改訂新版]Swift実践入門 ── 直感的な文法と安全性を兼ね備えた言語 WEB+DB PRESS plus 詳解 Swift 第4版 [改訂新版]Swiftポケットリファレンス (POCKET REFERENCE)

blog-page_footer_336




blog-page_footer_336




-iOS
-, ,

執筆者:


comment

メールアドレスが公開されることはありません。

CAPTCHA


関連記事

Xcode11のデバッグ機能

1 はじめに2 Device Conditions2.1 Thermal state condition2.2 Network link condition3 Environment Override ...

swift

Swiftでシェア機能や外部アプリ起動の導線を簡単に実装できるライブラリ「SwiftShareBubbles」

1 はじめに2 準備3 実装3.1 表示3.2 用意されているパターン4 さいごに はじめに こんにちは、nukkyです。 今回はSNSでのシェア機能や外部アプリ起動の導線を追加したいときに 簡単に実 ...

[Swift]アプリのフォアグラウンドに特定の処理を行う。

1 はじめに2 今回の目標3 画面構成4 通知の設定4.1 通知の送信4.2 通知の受信と削除-BaseController5 それぞれの画面の設定5.1 初期画面(FirstViewControll ...

swift

Swift3 + Alamofire4 + Unbox2.4を使ってJSONをパースする

1 はじめに1.1 前提条件1.2 完成形2 モデルの作成3 APIクラスの作成4 ViewControllerの作成4.1 Delegateの指定4.2 TableViewの設定4.3 Search ...

swift

Swift3で動的にUIViewを切り替える Part2

1 はじめに1.1 前提条件2 完成イメージ3 StoryBoardの準備3.1 Viewの配置3.1.1 ① Segmentを配置するView3.1.2 ② ContainerViewを表示するVi ...

フォロー

follow us in feedly

blog-page_side_responsive

2019年11月
 12
3456789
10111213141516
17181920212223
24252627282930

アプリ情報

私たちは無料アプリもリリースしています、ぜひご覧ください。 下記のアイコンから無料でダウンロードできます。