URLセッションとAlamfore


こんにちはジェジェロです😊
個人的なプロジェクトを行う過程でよく使われていますが、この2つのライブラリの違いがよく分からないので、この機会にまとめておきたいと思います.

💡 URLセッションとは?


アプリケーションは通常、サーバと通信する際にREST APIを使用します.HTTP通信用のSWIFT内のライブラリ.
URLセッションでは、認証サポートのためのインクリメンタル・ゲートウェイ・メソッドが多数用意されており、アプリケーションが実行されていないか、一時停止している間にバックグラウンド・タスクを介してコンテンツをダウンロードできます.

💡 URLセッションのタイプ


URLセッションは、URLセッションオブジェクトが所有するコンフィギュレーションプロセスオブジェクトによって決定される3種類のセッションを提供します.
1.Default Session
  • 基本通信用(Cookieと同じ記憶オブジェクトを用いる)
  • .
    2.Ephemeral Session
  • Cookieまたはキャッシュを格納しないポリシーを使用する場合は
  • を使用する.
    3.Background Session
  • アプリケーションがバックグラウンドにあるときのコンテンツのダウンロード/アップロード
  • 💡 URLSessionTask


    URLSessionTaskセッション操作を表す抽象クラス.
    1つのセッションでは、URLセッションクラスは、データタスク、アップロードタスク、ダウンロードタスクの3つのタスクタイプをサポートします.
    URLSessionDataTask:HTTPの様々な方法でサーバから応答データを受信し、データオブジェクトを取得する
    URL Session UploadTask:アプリケーションからWebサーバにデータオブジェクトまたはファイルデータをアップロードし、主にPOSTまたはPUTメソッドを使用する
    URLSessionDownloadTask:サーバからデータをダウンロードし、ファイルとして格納します.アプリケーションがスタンバイ状態または非稼働状態の場合は、バックグラウンド状態で詳細をダウンロードできます.
    JSON、XML、HTMLなどの単純なデータの転送では、主にデータ操作が使用されます.容量の大きいファイルでは、アプリケーションがバックグラウンドにあるときに転送するために、主にアップロード(ダウンロード)操作が使用されます.
    💡 コードの例
    // URLSessionConfiguration 생성 (세 가지 존재): .default / .ephemeral / .background
    let config = URLSessionConfiguration.default
    let session = URLSession(configuration: config)
    
    // URLComponents를 생성하여 query 설정
    var urlComponents = URLComponents(string: "https://ios-development.tistory.com/search/users?")
    let userIDQuery = URLQueryItem(name: "id", value: "123")
    let ageQuery = URLQueryItem(name: "age", value: "20")
    urlComponents?.queryItems?.append(userIDQuery)
    urlComponents?.queryItems?.append(ageQuery)
    
    // URLComponents와 URLSession을 이용하여 URLSessionDataTask 생성
    guard let requestURL = urlComponents?.url else { return }
    // let request = URLRequest(url:requestURL) 
    // method나 header를 지정해야 할 때 request 객체 생성해서 프로퍼티로 지정
    let dataTask = session.dataTask(with: requestURL) { (data, response, error) in
    	
        // error가 존재하면 종료
        guard error == nil else { return }
    
        // status 코드가 200번대여야 성공적인 네트워크라 판단
        let successsRange = 200..<300
        guard let statusCode = (response as? HTTPURLResponse)?.statusCode,
              successsRange.contains(statusCode) else { return }
    
        // response 데이터 획득, utf8인코딩을 통해 string형태로 변환
        guard let resultData = data else { return }
        let resultString = String(data: resultData, encoding: .utf8)
        print(resultData)
        print(resultString)
    }
    
    // network 통신 실행
    dataTask.resume()

    ではAlamforeは何ですか?


    💡 AlamofreはSWIFTベースのHTTPネットワークライブラリであり、Appleベースネットワークベースのインタフェースを提供し、一般的なネットワーク操作を簡素化しています.
    すなわち、Alamofreは、既存のURLセッションに基づいてURLセッションをWrappingしたライブラリである.
  • 接続可能要求/応答方法
  • URL/JSON/plistパラメータ符号化
  • ファイル/データ/ストリーム/複数部分フォームデータアップロード
  • リクエストまたはResumeデータを使用して
  • をダウンロード
  • NSURLCrementialによる認証
  • HTTPリスニング検証
  • TLS証明書と公開鍵Pinning
  • 進捗モジュールおよびNSProgress
  • cURLデバッグ出力
  • 全面的なユニットテスト保証
  • 完全なドキュメント化
  • 様々な機能を提供しています.
    すなわち,Alamofileを用いてコードを簡略化し,より読み取り可能にすることが多い.
    💡 コードチェックを使用したURLセッション、Alamofireの違い
    
    // URL Session Code
    var request = URLRequest(url: URL(string: "https://api.github.com/users")!)
    request.httpMethod = "POST"
    let params = ["id":id, "password":password] as Dictionary
    
    do {
      try request.httpBody = JSONSerialization.data(withJSONObject: params, options: [])
    } catch {
      return
    }
    
    request.addValue("application/json", forHTTPHeaderField: "Content-Type")
    request.addValue("application/json", forHTTPHeaderField: "Accept")
    
    URLSession.shared.dataTask(with: request, completionHandler: {(data, response, error) -> Void in
      if let response = response as? HTTPURLResponse, 200...299 ~= response.statusCode {
        //SUCCESS
      }else{
        //Failure
        }
    })
    requestオブジェクトを作成する場合は、メソッドを設定し、パラメータをディック値に設定してJSONに符号化してhttpbodyに、タイトルをaddValueに入れる必要があります.
    さらにCompletionHandlerは、成功したかどうかを個別にチェックする必要があります.
    このコードをAlamofireに変換
     AF.request("https://api.github.com/users", method: .get, parameters: param, encoding: URLEncoding.default, headers: ["Content-Type":"application/json", "Accept":"application/json"])
                .validate(statusCode: 200..<300)
                .responseJSON { (response) in
                if let JSON = response.result.value
                {
                    print(JSON)
                }
            }
    簡単に変えられる
    requestメソッドのパラメータにはhttp通信パラメータが含まれ、符号化値でパラメータを符号化する方法と、値を伝達する方法を指定します.
    URLEncoding.defaultはget,head,deleteでqueryパラメータとして貼り付け,残りの場合http bodyとして値を渡す.
    検証はまた、有効性チェックを行うこともできます.
    responseJSONやresponseDataなどの受信データに応答するフォーマットを設定できます.

    の最後の部分


    以前Alamofireを勉強していた頃はNOTIONの内容にまとめられていましたが、ブログが始まる頃には、移動しながら読み返していて、新しい感じもありました.書くだけで読まないと忘れてしまうので、よく書いた文章を読みます!
    ありがとうございます.😊
    いつでもご健康のご指導をお待ちしております