0
0

Alamofireの基礎について調べました

Last updated at Posted at 2024-09-06

はじめに

Alamofireを今までなんとなくつかってたので調べました。

目次

  1. Alamofireとは?
  2. 特徴
  3. 実装例
  4. おまけ(各メソッド)
  5. 参考文献

Alamofireとは?

API通信するためのSwiftのライブラリ。
URLSessionなど既存のものを使いやすくしたライブラリ。

特徴

公式に書いてある特徴をわかりやすくまとめてみました

  • Chainable Request / Response Methods: リクエストやレスポンスのメソッドを連鎖的(順番)に呼び出せる。
    →実装例がわかりやすい例です
  • Swift Concurrency Support Back to iOS 13, macOS 10.15, tvOS 13, and watchOS 6: iOS 13やそれ以降のOSでSwiftの非同期処理(Concurrency)がサポートされている。
    →要はasync/awaitをつかえるよーってこと
  • Combine Support: Combineフレームワークを使った非同期処理がサポートされている。
    →Combineが使えるよー
  • URL / JSON Parameter Encoding: URLやJSON形式でのパラメータのエンコードが可能。
  • Upload File / Data / Stream / MultipartFormData: ファイルやデータ、ストリーム、マルチパートフォームデータのアップロードをサポート。
  • Download File using Request or Resume Data: リクエストを使ったダウンロードや中断したダウンロードの再開が可能。
  • Authentication with URLCredential: URLCredentialを使った認証機能。
  • HTTP Response Validation: HTTPレスポンスの検証機能。
    →サーバーから返されたデータが正しいかどうかをチェックする機能
  • Upload and Download Progress Closures with Progress: アップロードやダウンロードの進捗状況をクロージャで追跡できる。
  • cURL Command Output: リクエストをcURLコマンドとして出力可能。
  • Dynamically Adapt and Retry Requests: リクエストを動的に適応させたり、再試行する機能。
  • TLS Certificate and Public Key Pinning: TLS証明書や公開鍵のピンニングをサポート。
  • Network Reachability: ネットワークの到達可能性のチェック機能。
  • Comprehensive Unit and Integration Test Coverage: ユニットテストや統合テストが包括的にサポートされている。
  • Complete Documentation: 完全なドキュメントが提供されている。

実装例

Alamofireを使ったAPI通信

import Alamofire
// Alamofireを使ってAPIからデータを取得する
func fetchDataWithAlamofire(pokeName: String) {
  // リクエストURLを指定(今回適当に書いてます)
  let url = "https://pokeapi.co/api/v2/pokemon/\(pokeName)"

  // Alamofireリクエストを作成
  AF.request(url, method: .get)
    .validate() // レスポンスの検証
    .responseJSON { response in
      switch response.result {
      case .success(let json):
        // データの処理
        print("Response JSON:", json)
      case .failure(let error):
        // エラーハンドリング
        print("Error:", error)
      }
    }
}

めっちゃシンプルですね!URLSessionを使って書いてたらエラー処理など長々と書く必要があるのでかなりありがたいですね!
詳細を書いていきます。

  1. AF
    Alamofireの略(夜のお店などではありません)。Alamofireの機能がたくさん詰まってるそうです(はなほじ)

  2. request(url, method: .get)
    直感的にurl(エンドポイント)にGETでリクエストを飛ばすよってこと

  3. validate()
    データを取ってこれたかどうか判断

  4. responseJSON
    データがJSON形式で返ってきたら、そのデータを教えてね」という命令です。返ってきたJSONデータを見て、どう処理するか決めます。
    Switch文でレスポンスの内容が正常であったら返ってきたレスポンスをprintし、エラーがあったらエラーをprint

AF.したい処理
連鎖的,つまり連続して書いていくんですね

おまけ

公式ドキュメントにある

let response = await AF.request("https://httpbin.org/get", interceptor: .retryPolicy)
// Automatic HTTP Basic Auth.
  .authenticate(username: "user", password: "pass")
// Caching customization.
  .cacheResponse(using: .cache)
// Redirect customization.
  .redirect(using: .follow)
// Validate response code and Content-Type.
  .validate()
// Produce a cURL command for the request.
  .cURLDescription { description in
    print(description)
  }
// Automatic Decodable support with background parsing.
  .serializingDecodable(DecodableType.self)
// Await the full response with metrics and a parsed body.
  .response
// Detailed response description for easy debugging.
debugPrint(response)

の各メソッドについて軽く紹介しておきます(自分も理解深めたい)

  1. authenticate(username: "user", password: "pass")
    Basic認証かかってるAPIにリクエストを飛ばすときにusernamepasswordを設定して使う

  2. cacheResponse(using: .cache)
    このデータをcasheとして保存して次回も使えるようにしてねって記述

  3. redirect(using: .follow)
    APIから返されたデータが別の場所に移動したときに、どうするかを決める
    この例だと「データの場所が変わったときは、自動で新しい場所に移動してね」ってこと

  4. cURLDescription { description in print(description) }:
    cURLDescriptionは、APIリクエストをcURLコマンドとして表示し、リクエストの詳細をチェック

  5. serializingDecodable(DecodableType.self)
    デコードしたいとき

追記

responseJSONだと以下の警告が出ます。

responseJSON(queue:dataPreprocessor:emptyResponseCodes:emptyRequestMethods:options:completionHandler:)' is deprecated: responseJSON deprecated and will be removed in Alamofire 6. Use responseDecodable instead

これはresponseJSONが非推奨なのでresponseDecodableを使えよということです。
(Alamofire6からresponseJSONが削除されるみたいですね。)

  • responseJSON: JSON型のデータを受け取る
  • responseDecodableデコードされたデータを受け取る

なので利便性もふくめてresponseDecodableに慣れておいた方がいいですね。
ちなみに警告消したいだけならresponseJSONresponseDataに書き換えればいけます

cURLとは...

  • cURLは、インターネットでデータを送ったり受け取ったりするためのコマンドです

参考文献

公式
https://alamofire.github.io/Alamofire/

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0