„Alamofire vs URLSession“: tinkle „Swift“ palyginimas

„Alamofire“ ir „URLSession“ padeda pateikti tinklo užklausas „Swift“. URLSession API yra pagrindų sistemos dalis, tuo tarpu Alamofire reikia pridėti kaip išorinę priklausomybę. Daugelis kūrėjų abejoja, ar reikia įtraukti papildomą priklausomybę nuo kažko pagrindinio, pavyzdžiui, tinklo sukūrimo „Swift“. Galų gale puikiai įmanoma įdiegti tinklo lygmenį su puikia šių dienų „URLSession“ API.

Šis tinklaraščio įrašas yra skirtas palyginti abi sistemas ir sužinoti, kada pridėti „Alamofire“ kaip išorinę priklausomybę.

Tai rodo tikrąją „Alamofire“ galią, nes karkasas palengvina daugelį dalykų.

Kas yra Alamofire?

Kur URLSession galima rasti standartinėje fondo sistemoje, turime eiti į „Github“ ir surasti „Alamofire“. Tai yra atvira kilmė ir priklauso „Alamofire Software Foundation“. Sistema yra labai populiari, nes jūs galite perskaityti iš statistikos, parašytos šio tinklaraščio įrašo metu:

  • 164 bendraautoriai
  • 30 K + žvaigždžių
  • Remiantis „CocoaPods“ statistika ir ją naudojančiomis 600 000 programų yra 42 milijonai (!!) atsisiuntimų

Šie statistiniai duomenys daro jį vienu iš populiariausių „Swift“ rėmų. Tai gerai prižiūrima, dažnai naudojama sistema, kuri turėtų palengvinti tinklų kūrimą jūsų programose.

Alamofire pavadintas Alamo ugnies gėlės, hibridinio „Bluebonnet“, oficialios Teksaso valstijos gėlės, varianto vardu.

Palyginti „Alamofire“ ir URLSession

„Twitter“ savo sekėjų paklausiau, ką jie nori naudoti: „Alamofire“ ar „URLSession“.

Pasirodo, kad kūrėjai, norintys naudoti „Alamofire“ ar „URLSession“, aiškiai atsiskiria. Didelis klausimas, ar jie nori tik to, ar jie taip pat pasirenka pasirinktą sistemą.

„Alamofire“ reklamuojama kaip „Elegantiškas greitas tinklas“, kuris jau šiek tiek parodo savo ketinimą. Tai yra „URLSession“ viršuje esantis sluoksnis, kurio tikslas - palengvinti bendrų tinklo funkcijų įgyvendinimą.

Funkcijos, kurias lengviau įdiegti naudojant „Alamofire“

„Alamofire“ yra daug papildomos logikos, be to, kad reikia paprasčiausiai kurti tinklo užklausą. Šios savybės gali pakeisti ir kartais sutaupyti daug laiko, palyginti su pačių kūrimu.

Jų saugyklos „readme“ reklamuojamų funkcijų sąrašas yra ilgas, ir tik nedaugelis iš jų suteikia unikalią papildomą vertę:

  • Sertifikato prisegimas. Tai gali užtrukti, kol tai išsiaiškinsite ir sukonstruosite patys.
  • Prašo dar kartą. Kai užklausa nepavyksta, pavyzdžiui, dėl nesėkmingo autentifikavimo, galite lengvai atnaujinti savo autentifikavimo žetoną ir vėl iškviesti tą pačią užklausą, neliesdami įgyvendinimo kodo.

Be šių savybių, užklausų sudarymo sintaksė yra daug elegantiškesnė ir lengviau naudojama. Tai sutaupo nuo daugybės papildomų kodų ir žymiai palengvina patvirtinimą ir klaidų tvarkymą.

Tinklo pasiekiamumo vadybininkas dažnai laikomas pranašumu. Tačiau, kadangi „iOS 12“ galime naudoti ir naująją „NWPathMonitor“ API.

Tinklo užklausos sudarymas lyginamas

Tarkime, kad turime API, kuri leidžia mums sukurti naują lentą pavadinimu „New York Highlights“. Tam labai lengva naudoti „Alamofire“ kodą:

AF.request („https://api.mywebserver.com/v1/board“, metodas: .get, parametrai: [„title“: „New York Highlights“])
    patvirtinti (būsenos kodas: 200 .. <300)
    .responseDecodable {(atsakymas: DataResponse)
        perjungti response.result {
        atvejis .sėkmė (leiskite lenta):
            spausdinti („Sukurtos lentos pavadinimas yra \ (board.title)“) // Niujorko renginiai
        atvejis. gedimas (tegul klaida):
            spausdinti ("Lentos kūrimas nepavyko su klaida: \ (error.localizedDescription)")
        }
}

Norint atlikti lygiai tą patį su URLSession API, reikia šiek tiek daugiau darbo.

enum Klaida: „Swift.Error“ {
    atvejo užklausa nepavyko
}

// Sukurkite URL
var components = URLComponents (eilutė: „https://api.mywebserver.com/v1/board“)!
components.queryItems = ["title": "New York Highlights"]. žemėlapis {(raktas, vertė)
    URLQueryItem (vardas: raktas, reikšmė: vertė)
}

// Sukurti ir vykdyti užklausą
leisk užklausti = pabandyk! URLRequest (URL: komponentai.url !, metodas: .get)
URLSession.shared.dataTask (su: užklausa) {(duomenys, atsakymas, klaida)
    daryti {
        sargyba tegul duomenys = duomenys,
            tegul atsakymas = atsakymas kaip? „HTTPURLResponse“ (200 .. <300) ~ = response.statusCode,
            klaida == dar nėra {
            // Duomenų nebuvo, patvirtinti nepavyko arba įvyko klaida.
            mesti klaidą ?? Error.requestFailed
        }
        leisti lentą = išbandyti JSONDecoder (). iššifruoti („Board.self“, iš: duomenys)
        spausdinti („Sukurtos lentos pavadinimas yra \ (board.title)“) // Niujorko renginiai
    } pagauti {
        spausdinti ("Lentos kūrimas nepavyko su klaida: \ (error.localizedDescription)")
    }
}

Tai parodo tikrąją „Alamofire“ galią, nes karkasas palengvina daugelį dalykų:

  • Užklausa kaupiama per vieną iniciatorių
  • Pagal numatytuosius nustatymus URL kodavimo programa koduoja parametrus
  • Patvirtinimas atliekamas tiesiogiai su paprastu įdėklu ir paverčiama stipriai įvesta klaida, jei patvirtinti nepavyksta. Atsakymo rezultato enum grąžins šią klaidą gedimo byloje.
  • Bendras užbaigimo atšaukimas leidžia lengvai iššifruoti atsakymą į mūsų pasirinktinį lentos tipą

Tik tai jau gali būti priežastis pasirinkti „Alamofire“ ir palengvinti jūsų gyvenimą. Naudodamiesi „URLSession“ greičiausiai baigsite kurti savo aplanką, kurį reikia prižiūrėti ir išbandyti. Iš pradžių gali atrodyti, kad tai yra geresnis sprendimas, palyginti su naujos priklausomybės įtraukimu, tačiau plėtojantis projektams gali būti, kad jūsų tinklų lygmuo vystosi ir tampa sudėtingesnis.

Kaip blogai būtų pridėti „Alamofire“ kaip priklausomybę?

Paaiškinkime, kad turite būti atidūs pridėdami savo projekto išorinę priklausomybę. Jei jis nėra prižiūrimas, testuojamas arba daug nenaudojamas, tai gali padidinti jūsų projekto riziką. Galų gale jums gali tekti tęsti plėtrą patiems.

„Alamofire“ atveju jums tikrai nereikia dėl to jaudintis. Karkasas yra gerai prižiūrimas, išbandytas ir naudojamas. Karkasas yra gana mažas, todėl tinklo užklausų rašymas tampa elegantiškesnis.

Išvada: Kaip priimti sprendimą?

„Alamfore“ dažnai lyginamas su „AFNetworking“, „Objective-C“ lygiaverčia tinklų kūrimo sistema. Tuo metu tinklų kūrimas buvo daug sunkesnis be URLsession API, egzistuojančios tik nuo „iOS 7“. Todėl buvo akivaizdu, kad pasirinkote tokią sistemą kaip „AFNetworking“, kad jūsų gyvenimas būtų šiek tiek lengvesnis.

Šiais laikais, žiūrint į turimas URLSession API, yra daug lengviau sudaryti tinklo užklausas. Tačiau tai atlikę greičiausiai paskatinsite kurti savo tinklo lygmenį „URLSession“ viršuje. Šį sluoksnį reikia išbandyti ir, plėtojant projektą, jis gali išaugti į sudėtingesnį sluoksnį.

Atsižvelgdami į tai, atsižvelgdami į tai, kad „Alamofire“ yra gerai prižiūrimi ir naudojami daugelyje projektų, tikriausiai sutaupysite daug problemų ir laiko, pridėdami „Alamofire“ kaip priklausomybę.

Šis tinklaraščio įrašas lygina URLSession su „Alamofire 5“, kuris rašymo metu yra beta versija. Daugiau apie šią laidą galite perskaityti čia.

Iš pradžių paskelbta „SwiftLee“.

Daugiau įrašų ir atnaujinimų: @twannl