Alamofire vs URLSession: salīdzinājums tīklā Swift

Gan Alamofire, gan URLSession palīdz jums veikt tīkla pieprasījumus ar Swift. URLSession API ir daļa no pamatsistēmas, turpretim Alamofire jāpievieno kā ārēja atkarība. Daudzi izstrādātāji šaubās, vai ir nepieciešams iekļaut papildu atkarību no kaut kā pamata, piemēram, tīkla izveidošana Swift. Rezultātā ir lieliski paveicams tīkla slāņa ieviešana ar lieliskajām URLSession API, kas mūsdienās ir pieejamas.

Šis emuāra ieraksts ir šeit, lai salīdzinātu abus ietvarus un uzzinātu, kad pievienot Alamofire kā ārēju atkarību.

Tas parāda Alamofire reālo spēku, jo karkass daudz ko padara vienkāršāku.

Kas ir Alamofire?

Vietās, kur URLSession var atrast standarta fonda ietvaros, mums jādodas uz Github, lai atrastu Alamofire. Tas ir atvērts ietvarstruktūra un pieder Alamofire programmatūras fondam. Ietvars ir ļoti populārs, jo no emuāra ziņas rakstīšanas statistikas datiem jūs varat lasīt:

  • 164 respondenti
  • 30 K + zvaigznes
  • Saskaņā ar CocoaPods statistiku un 600 000 + lietotnēm, kas to izmanto, lejupielādēti 42 miljoni (!!)

Šī statistika padara to par vienu no populārākajiem pieejamajiem Swift ietvariem. Tas ir labi uzturēts, bieži izmantots ietvars, kam vajadzētu atvieglot tīkla izveidošanu jūsu lietotnēs.

Alamofire ir nosaukta pēc Alamo Fire zieda, hibrīda varianta Bluebonnet - oficiālajam Teksasas štata ziedam.

Salīdzināts Alamofire un URLSession

Esmu saviem Twitter sekotājiem pajautājis, ko viņi labprātāk izmanto: Alamofire vai URLSession.

Izrādās, ka ir skaidri nodalīti izstrādātāji, kuri izvēlas izmantot Alamofire vai URLSession. Liels jautājums šeit ir, vai viņi tikai dod priekšroku tam, vai arī viņi patiešām izvēlas iet arī pēc izvēles.

Alamofire tiek reklamēts kā “Elegants tīklojums ātri”, kas jau nedaudz atmet tā nodomu. Tas ir slānis virs URLSession ar mērķi atvieglot kopīgo tīkla funkciju ieviešanu.

Funkcijas, kuras ir vieglāk ieviest ar Alamofire

Alamofire satur daudz papildu loģikas, izņemot tīkla pieprasījuma izveidi. Šīs funkcijas var mainīt, un dažreiz var ietaupīt daudz laika, salīdzinot ar to izveidi pats.

To krātuvē readme reklamēto funkciju saraksts ir garš, un tikai daži no tiem patiešām piešķir unikālu papildu vērtību:

  • Sertifikāta piespraušana. Tas var aizņemt kādu laiku, lai to sakārtotu un izveidotu pats.
  • Pieprasījumi mēģināt vēlreiz. Ja pieprasījums neizdodas, piemēram, autentifikācijas kļūmes dēļ, varat viegli atsvaidzināt autentifikācijas pilnvaru un atkārtoti izsaukt to pašu pieprasījumu, nepieskaroties ieviešanas kodam.

Neatkarīgi no šīm funkcijām pieprasījumu veidošanas sintakse ir daudz elegantāka un vieglāk lietojama. Tas ļauj ietaupīt no daudz papildu koda un ievērojami atvieglo validāciju un kļūdu apstrādi.

Bieži vien par priekšrocību uzskata tīkla sasniedzamības pārvaldnieku. Tomēr kopš iOS 12 mēs varam izmantot arī jauno NWPathMonitor API.

Tīkla pieprasījuma veidošana, salīdzinot

Pieņemsim, ka mums ir API, kas ļauj mums izveidot jaunu tāfeli ar nosaukumu “New York Highlights”. Šim nolūkam izmantot Alamofire kodu ir ļoti vienkārši:

AF.request ("https://api.mywebserver.com/v1/board", metode: .get, parametri: ["nosaukums": "New York Highlights"])
    .validēt (statusCode: 200 .. <300)
    .responseDecodable {(atbilde: DataResponse)
        slēdzis response.result {
        lieta .success (let board):
            print ("Izveidotā dēļa nosaukums ir \ (dēlis.title)") // New York Highlights
        case .failure (pieļaut kļūdu):
            print ("Dēļa izveide neizdevās ar kļūdu: \ (error.localizedDescription)")
        }
}

Lai veiktu tieši to pašu, izmantojot URLSession API, ir nepieciešams nedaudz vairāk darba.

enum kļūda: Swift.Error {
    lietas pieprasījums neizdevās
}

// Izveidojiet URL
var components = URLComponents (virkne: "https://api.mywebserver.com/v1/board")!
components.queryItems = ["title": "New York Highlights"]. karte {(atslēga, vērtība) iekš
    URLQueryItem (nosaukums: atslēga, vērtība: vērtība)
}

// Ģenerējiet un izpildiet pieprasījumu
ļaujiet pieprasīt = izmēģināt! URLRequest (vietrādis URL: components.url !, metode: .get)
URLSession.shared.dataTask (ar: pieprasījums) {(dati, atbilde, kļūda) iekš
    darīt {
        aizsargs ļauj datiem = dati,
            ļaujiet atbilde = atbilde kā? HTTPURLatbildēšana, (200 .. <300) ~ = response.statusCode,
            kļūda == vēl nav {
            // Datu nebija, validācija neizdevās vai radās kļūda.
            iemest kļūdu ?? Error.requestFailed
        }
        let board = izmēģināt JSONDecoder (). atšifrēt (Board.self, from: data)
        print ("Izveidotā dēļa nosaukums ir \ (dēlis.title)") // New York Highlights
    } noķert {
        print ("Dēļa izveide neizdevās ar kļūdu: \ (error.localizedDescription)")
    }
}

Tas parāda Alamofire reālo spēku, jo ietvars atvieglo daudzas lietas:

  • Pieprasījums tiek izveidots vienā inicializētājā
  • URL kodētājs pēc noklusējuma kodē parametrus
  • Validācija tiek veikta iekšēji, izmantojot vienkāršu vienas kārtas numuru, un, ja validācija neizdodas, tā tiek pārveidota par stipri ievadītu kļūdu. Atbildes rezultāta enum parādīs šo kļūdu kļūdas gadījumā.
  • Vispārējs pabeigšanas atzvanīšana ļauj viegli atkodēt atbildi mūsu pielāgotajā paneļa tipā

Tikai tas jau varētu būt iemesls, kāpēc izvēlēties Alamofire un padarīt jūsu dzīvi vieglāku. Izmantojot URLSession, jūs, visticamāk, izveidosit savu aptinumu, kam nepieciešama apkope un pārbaude. Sākumā tas varētu šķist labāks lēmums, salīdzinot ar jaunas atkarības pievienošanu, taču, attīstoties projektiem, var viegli būt, ka attīstās un kļūst sarežģītāks jūsu pašu tīkla slānis.

Cik slikti būtu pievienot Alamofire kā atkarību?

Paskaidrosim, ka jums ir jābūt uzmanīgiem, pievienojot savam projektam ārēju atkarību. Ja tas netiek uzturēts, pārbaudīts vai tiek izmantots daudz, tas var radīt iespējamu risku jūsu projektam. Galu galā jums, iespējams, nāksies pats turpināt attīstību.

Alamofire gadījumā jums par to nav īpaši jāuztraucas. Rāmis tiek labi uzturēts, pārbaudīts un izmantots. Ietvars ir diezgan mazs, un tas padara to daudz elegantāku, lai rakstītu tīkla pieprasījumus.

Secinājums: kā pieņemt lēmumu?

Alamfore bieži salīdzina ar AFNetworking, objektīva-C ekvivalentu tīkla veidošanas sistēmu. Tajā laikā tīklošana bija daudz grūtāka bez URLsession API, kas pastāv tikai kopš iOS 7. Tāpēc bija acīmredzamāk izvēlēties tādu ietvaru kā AFNetworking, lai padarītu jūsu dzīvi nedaudz vieglāku.

Mūsdienās, apskatot pieejamās URLSession API, tīkla pieprasījumus ir daudz vieglāk izveidot. Tomēr, iespējams, šādi rīkojoties, jūs izveidosit savu tīkla slāni virs URLSession. Šis slānis ir jāpārbauda, ​​un, attīstoties jūsu projektam, tas var potenciāli kļūt sarežģītāks.

Paturot to prātā, ņemot vērā faktu, ka Alamofire tiek labi uzturēts un izmantots daudzos projektos, iespējams, jūs ietaupīsit daudz problēmu un laika, pievienojot Alamofire kā atkarību.

Šajā emuāra ierakstā tiek salīdzināta URLSession ar Alamofire 5, kuras rakstīšanas brīdī tā ir beta versija. Plašāku informāciju par šo laidienu varat lasīt šeit.

Sākotnēji tas tika publicēts vietnē SwiftLee.

Vairāk ziņu un atjauninājumu: @twannl