Alamofire vs URLSession: vertailu Swift-verkostoitumiseen

Alamofire ja URLSession auttavat sinua tekemään verkkopyyntöjä Swiftissä. URLSession API on osa perustakehystä, kun taas Alamofire on lisättävä ulkoisena riippuvuutena. Monet kehittäjät epäilevät, onko tarpeen sisällyttää ylimääräinen riippuvuus jostakin perusasetuksesta, kuten verkottumisesta Swiftissä. Loppujen lopuksi on täysin toteutettavissa oleva verkkokerros, jolla on hienot nykyään saatavilla olevat URLSession API -sovellusliittymät.

Tämä blogiviesti on täällä, jotta voidaan verrata molempia kehyksiä ja selvittää, milloin Alamofire on lisättävä ulkoisena riippuvuutena.

Tämä osoittaa Alamofiren todellisen voiman, koska kehys helpottaa monia asioita.

Mikä on Alamofire?

Mistä URLSession löytyy tavanomaisesta säätiökehyksestä, meidän on mentävä Githubille etsimään Alamofire. Se on avoimen lähteen kehys, jonka omistaa Alamofire Software Foundation. Kehys on erittäin suosittu, koska voit lukea tämän blogin kirjoittamisen ajankohtaisista tilastoista:

  • 164 vastaajaa
  • 30 kt + tähdet
  • 42 miljoonaa (!!) latausta CocoaPods-tilastojen ja sitä käyttävien 600 000+ sovelluksen mukaan

Nämä tilastot tekevät siitä yhden suosituimmista saatavilla olevista Swift-kehyksistä. Se on hyvin ylläpidetty, usein käytetty kehys, jonka pitäisi helpottaa verkkojen käyttöönottoa sovelluksiin.

Alamofire on nimetty Alamo Fire -kukka, joka on hybridi variantti Bluebonnetistä, Texasin virallisesta osavaltion kukasta.

Alamofirea ja URLSessionia verrattiin

Olen kysynyt Twitterissä seuraajiltaan, mitä he haluavat käyttää: Alamofire tai URLSession.

Osoittautuu, että kehittäjien välillä, jotka mieluummin käyttävät Alamofirea tai URLSessionia, on selvä ero. Suuri kysymys on, haluavatko he vain sitä, vai haluavatko he todellakin mennä valittuihin puitteisiin.

Alamofirea mainostetaan nimellä “Elegant Networking in Swift”, joka antaa aikomuksensa jo vähän pois. Se on kerros URLSession päällä, ja tavoitteena on helpottaa yleisten verkkoominaisuuksien käyttöönottoa.

Ominaisuudet, jotka on helpompi toteuttaa Alamofiren avulla

Alamofire sisältää paljon ylimääräistä logiikkaa lukuun ottamatta vain verkkopyynnön rakentamista. Nämä ominaisuudet voivat vaikuttaa toisiinsa ja voivat joskus säästää paljon aikaa verrattuna niiden itse rakentamiseen.

Niiden ominaisuuksien luettelo, joita mainosvarastoissaan luetaan, on pitkä, josta vain muutama niistä tuo todella ainutlaatuisen lisäarvon:

  • Varmenteen kiinnitys. Tämän selvittäminen ja rakentaminen itse voi viedä jonkin aikaa.
  • Pyytää uudelleen. Kun pyyntö epäonnistuu esimerkiksi todennusvirheen takia, voit helposti päivittää todennustunnuksen ja kutsua saman pyynnön uudelleen koskematta toteutuskoodia.

Näiden ominaisuuksien lisäksi pyyntöjen rakentamisen syntaksi on paljon tyylikäs ja helpompi käyttää. Se säästää paljon ylimääräistä koodia ja helpottaa validointia ja virheiden käsittelyä.

Usein etuna pidetään verkon tavoitettavuuspäällikköä. IOS 12: n jälkeen voimme kuitenkin käyttää myös uutta NWPathMonitor API -sovellusta.

Verkkopyynnön rakentaminen verrattuna

Oletetaan, että meillä on sovellusliittymä, jonka avulla voimme luoda uuden taulun, jonka otsikko on “New York Highlights”. Tätä varten Alamofire-koodin käyttö on erittäin helppoa:

AF.request ("https://api.mywebserver.com/v1/board", menetelmä: .get, parametrit: ["otsikko": "New York Highlights"])
    .validate (statusCode: 200 .. <300)
    .responseDecodable {(vastaus: DataResponse)
        vaihda vastaus.tulos {
        tapaus .menestys (anna hallitus):
            print ("Luotu hallituksen otsikko on \ (taulu.title)") // New Yorkin kohokohdat
        case .failure (anna virhe):
            tulosta ("Taulun luominen epäonnistui virheellä: \ (error.localizedDescription)")
        }
}

Täsmälleen saman tekeminen URLSession API: n kanssa vaatii hieman enemmän työtä.

enum -virhe: Swift.Error {
    tapauspyyntö epäonnistui
}

// Luo URL-osoite
var components = URLComponents (merkkijono: "https://api.mywebserver.com/v1/board")!
components.queryItems = ["otsikko": "New York Highlights"]. kartta {(avain, arvo)
    URLQueryItem (nimi: avain, arvo: arvo)
}

// Luo ja suorita pyyntö
anna request = kokeilla! URLRequest (URL: komponentit.url !, menetelmä: .get)
URLSession.shared.dataTask (with: request) {(tiedot, vastaus, virhe)
    tee {
        vartija anna data = data,
            anna vastaus = vastaus kuin? HTTPURLvastaus, (200 .. <300) ~ = response.statusCode,
            virhe == nolla muuta {
            // Tietoja ei ollut, validointi epäonnistui tai tapahtui virhe.
            heittää virhe? Error.requestFailed
        }
        anna board = kokeile JSONDecoder () .dekoodausta (Board.self, from: data)
        print ("Luotu hallituksen otsikko on \ (taulu.title)") // New Yorkin kohokohdat
    } ottaa kiinni {
        tulosta ("Taulun luominen epäonnistui virheellä: \ (error.localizedDescription)")
    }
}

Tämä osoittaa Alamofiren todellisen voiman, koska kehys helpottaa monia asioita:

  • Pyyntö muodostuu yhdestä alustajasta
  • URL-kooderi koodaa parametrit oletuksena
  • Validointi tehdään sisäisessä muodossa yksinkertaisella linerillä ja muuttuu voimakkaasti kirjoitetuksi virheeksi, jos validointi epäonnistuu. Vastaustulos enum palauttaa tämän virheen vikatapauksessa.
  • Yleinen loppuunsoittaminen on helppo purkaa vastauksen mukautettuun Board-tyyppiin

Tämä vain voisi jo olla syy valita Alamofire ja tehdä elämästäsi helpompaa. URLSession avulla voit todennäköisesti päättää oman kääreesi, joka vaatii ylläpitoa ja testausta. Aluksi tämä saattaa tuntua olevan parempi ratkaisu verrattuna uuden riippuvuuden lisäämiseen, mutta projektien kehittyessä voi olla helppoa, että oma verkostotaso kehittyy ja monimutkaistuu.

Kuinka paha olisi lisätä Alamofire riippuvuuteen?

Tehdään selväksi, että sinun on oltava varovainen, kun lisäät ulkoista riippuvuutta projektiisi. Kun sitä ei ylläpidetä, testata tai käytetä paljon, se voi lisätä mahdollisen riskin projektiisi. Lopulta joudut ehkä jatkamaan kehitystä itse.

Alamofiren tapauksessa sinun ei tarvitse oikeasti huolehtia siitä. Kehystä ylläpidetään, testataan ja käytetään hyvin. Kehys on melko pieni ja tekee siitä tyylikkäämmän verkkopyyntöjen kirjoittamiseen.

Johtopäätös: Kuinka tehdä päätös?

Alamforea verrataan usein AFNetworkingiin, Object-C: n vastaavaan verkottumiskehykseen. Verkostoituminen oli tuolloin paljon vaikeampaa ilman URLsession-sovellusliittymää, joka on olemassa vain iOS 7: n jälkeen. Siksi oli selvemmin valittu kehys, kuten AFNetworking, tehdäksesi elämästäsi hieman helpompaa.

Nykyään käytettävissä olevia URLSession-sovellusliittymiä tarkasteltaessa on paljon helpompaa muodostaa verkkopyyntöjä. Näin toimimalla siirrytään todennäköisesti luomaan oma verkottotaso URLSession päälle. Tämä kerros on testattava, ja se voi kasvaa kohti monimutkaisempaa tasoa projektin kehittyessä.

Kun tämä mielessä otetaan huomioon, että Alamofire on hyvin ylläpidetty ja käytetty monissa projekteissa, säästät todennäköisesti itsellesi paljon vaivaa ja aikaa lisäämällä Alamofire riippuvuuteen.

Tässä blogiviestissä verrataan URLSessionia Alamofire 5: ään, joka on kirjoitushetkellä beeta. Voit lukea lisää tästä julkaisusta täältä.

Alun perin julkaistu SwiftLee-lehdessä.

Lisää viestejä ja päivityksiä: @twannl