Alamofire


Alamofire羽毛ハブドキュメントを見て

Alamofire


HTTPネットワークライブラリとして、アップル自身はネットワーク通信にURLセッションを提供しているが、より便利なインタフェースを提供するのはAlamforeである.
URLセッションに基づいた方法で複雑なネットワーク操作を改善することで、主なロジックに集中でき、データアクセスが容易になり、コードの読み取りがよりよくなります.

Alamforeの使用


まず、プロジェクトファイルにライブラリをインストールし、プロジェクトの上部にimport Alamforeを作成します.Alamofire 5以降AF開始Sessionこれはdefaultへの参照です.

Alamofireの主な関数


通信に関連するすべての関数を処理できますが、一般的に使用される主な関数は次のとおりです.
  • AF.upload:ファイルを複数の部分、ストリーム、およびファイルメソッドでアップロードします.
  • AF.download:ファイルをダウンロードするか、実行中のダウンロードを復元します.
  • AF.request:ファイルに関係のない他のHTTPを要求します.
  • Request


    サーバ通信要求時に使用する関数


    ->Alamofireは、要求を送信するときにメソッドに配置するパラメータとして使用されるHTTPMethodという列挙を格納します.
    getにbodyは含まれません.

    Response


    応答を確認したい場合は、リクエストの後に応答を付けることができます.Alamofireでの処理応答は6つに分けられる.
  • response
    :URLSessionDelegateからすべての情報を直接伝え、応答データを評価しません.
  • AF.request(url).response { response in 
        print(response)
     }
  • responseData
    :DataResponseSerializerを使用してサーバからデータを受信し、検証します.
  • AF.request(url).responseData { response in 
       print(response)
    }
  • responseString
    :StringResponseSerializerを使用して、サーバから返されたデータを指定した符号化文字列に変換します.
  • AF.request(url).responseString { response in 
       print(response)
    }
  • responseJSON
    :JSOnResponseSerializerを使用して、サーバから返されるデータのJSOnSerializationを指定します.ReadingOptionsを使用したAnyタイプに変換します.
  • AF.request(url).responseJSON { response in 
       print(response)
    }
  • responseDecodable
    :DecodableResponseSerializerを使用して、サーバから返されたデータを指定したDataDecoderを使用したDecodableタイプに変換します.
  • AF.request(url).responseDecodable { response in 
       print(response)
    }

    Validation


    .validation()を呼び出して有効性チェックを行います.ここで無効と判断した場合、応答は移行できません.
    AF.request(url)
      .validate()
      .response { response in 
         print(response)
    }
    公式文書は上記の通りです.
    特定の条件でブランチ処理を行う場合は、次のように記述できます.
            AF.request(UserRouter.signIn(signIn: SignInRequestModel(email: email, password: password)))
                .validate(statusCode: 200...500)
                .responseData { response in
                    switch response.result {
                    case .success(let data):
                        switch response.response?.statusCode {
                        case 200, 400:
                            guard let jsonData = try? JSONDecoder().decode(UserResponseModel.self, from: data) else { return }
                            return completion(.success(jsonData))
                            
                        default: completion(.networkFail)
                        }
                        
                    case .failure(let err):
                        print(err)
                    }
                }