Alamofire vs URLSession: samanburður fyrir net í Swift

Alamofire og URLSession hjálpa þér bæði að gera beiðnir um net í Swift. URLSession API er hluti af grunnrammanum en Alamofire þarf að bæta við sem utanaðkomandi ósjálfstæði. Margir verktaki efast um hvort það þurfi að fela í sér aukafíkn á einhverju grundvallaratriði eins og netkerfi í Swift. Í lokin er fullkomlega mögulegt að útfæra netlag með frábærum APISession API sem eru fáanleg nú um stundir.

Þessi bloggfærsla er hér til að bera saman bæði ramma og til að komast að því hvenær á að bæta við Alamofire sem utanaðkomandi ósjálfstæði.

Þetta sýnir raunverulegan kraft Alamofire þar sem umgjörðin gerir ýmislegt auðveldara.

Hvað er Alamofire?

Þar sem URLSession er að finna innan stöðluðu ramma Foundation, verðum við að fara á Github til að finna Alamofire. Þetta er opin ramma og í eigu Alamofire hugbúnaðarstofnunarinnar. Umgjörðin er mjög vinsæl þar sem þú getur lesið úr tölfræðinni um þessar mundir þegar þú skrifar þessa bloggfærslu:

  • 164 framlagsmenn
  • 30K + stjörnur
  • 42 milljónir (!!) niðurhöl samkvæmt CocoaPods tölfræði og 600K + forritum sem nota það

Þessi tölfræði gerir það að vinsælustu Swift ramma sem völ er á. Það er vel viðhaldinn, oft notaður rammi sem ætti að gera það auðveldara að innleiða net í forritin þín.

Alamofire er nefnd eftir Alamo Fire blómin, blendingur afbrigði af Bluebonnet, opinbera ríkisblóm Texas.

Alamofire og URLSession borin saman

Ég hef spurt fylgjendur mína á Twitter hvað þeir vilja nota: Alamofire eða URLSession.

Það kemur í ljós að það er skýr aðskilnaður milli hönnuða sem kjósa að nota Alamofire eða URLSession. Stór spurning hér er hvort þeir kjósi aðeins það eða hvort þeir kjósi í raun og veru að fara með umgjörð valsins.

Alamofire er auglýst sem „Glæsilegt net í Swift“ sem gefur frá sér fyrirætlun sína aðeins. Það er lag ofan á URLSession með það að markmiði að gera sameiginlega netaðgerðir auðveldari í framkvæmd.

Aðgerðir sem auðveldara er að útfæra með Alamofire

Alamofire inniheldur mikið af auka rökfræði fyrir utan að einfaldlega byggja upp netbeiðni. Þessir eiginleikar geta skipt sköpum og geta stundum sparað þér mikinn tíma miðað við að smíða þær sjálfur.

Listinn yfir aðgerðir sem auglýstar eru á geymslugeymslu geymslu þeirra er langur, en þaðan eru aðeins fáir þeirra sem bæta raunverulega við aukagildi:

  • Skírteini festing. Það getur tekið nokkurn tíma að raða þessu út og byggja þetta sjálfur.
  • Beiðnir aftur reynt. Þegar beiðni mistakast til dæmis vegna auðkennisbrests geturðu auðveldlega hresst auðkenningartáknið og kallað fram sömu beiðni aftur án þess að snerta framkvæmdakóðann.

Burtséð frá þessum eiginleikum er setningafræðin til að byggja upp beiðnir mun glæsilegri og auðveldari í notkun. Það sparar þér mikið aukakóða og auðveldar löggilding og villuhöndlun.

Oft séð sem kostur er stjórnandi netsins. En þar sem iOS 12 getum við líka nýtt okkur nýja NWPathMonitor API.

Uppbygging netbeiðni borin saman

Segjum að við höfum API sem gerir okkur kleift að búa til nýja borð með titlinum „New York Highlights“. Fyrir þetta er mjög auðvelt að nota Alamofire:

AF.request ("https://api.mywebserver.com/v1/board", aðferð: .get, breytur: ["title": "Hápunktar New York"])
    . sannprófa (stöðuskóða: 200 .. <300)
    .responseDecodable {(svar: DataResponse) í
        skipta um svar.result {
        mál. árangur (láttu stjórn):
            prenta ("Búið til titil skapaðs er \ (board.title)") // Hápunktar New York
        tilfelli. bilun (láttu villu):
            prenta ("Sköpun stjórnar mistókst með villu: \ (error.localizedDescription)")
        }
}

Að gera nákvæmlega það sama með URLSession API krefst aðeins meiri vinnu.

enum Villa: Swift.Error {
    málbeiðni mistókst
}

// Búðu til vefslóðina
var íhlutir = URLComponents (strengur: "https://api.mywebserver.com/v1/board")!
component.queryItems = ["title": "Hápunktar New York"]. kort {(lykill, gildi) í
    URLQueryItem (nafn: lykill, gildi: gildi)
}

// Búðu til og keyrðu beiðnina
láta beiðni = reyna! URLRequest (url: component.url !, aðferð: .get)
URLSession.shared.dataTask (með: beiðni) {(gögn, svar, villa) í
    gera {
        verja láta gögn = gögn,
            láta svar = svar sem? HTTPURL-svar, (200 .. <300) ~ = svar.status-kóða,
            villa == ekkert annað {
            // Gögn voru engin, staðfesting mistókst eða villa kom upp.
            kastvillu ?? Error.requestFailed
        }
        láta borð = prófa JSONDecoder (). afkóða (Board.self, frá: data)
        prenta ("Búið til titil skapaðs er \ (board.title)") // Hápunktar New York
    } veiða {
        prenta ("Sköpun stjórnar mistókst með villu: \ (error.localizedDescription)")
    }
}

Þetta sýnir raunverulegan kraft Alamofire þar sem umgjörðin gerir ýmislegt auðveldara:

  • Beiðnin er byggð upp innan eins frumstillara
  • Vefslóðakóðari umbreytir sjálfgefið breytum
  • Sannprófun er gerð samhliða einfaldri einskiptingu og breytist í sterkt innritaða villu ef staðfesting tekst ekki. Svöruniðurstaðan enum skilar þessari villu í biluninni.
  • Almennt svarhringingu gerir það auðvelt að lesa svarið yfir í sérsniðna borðategund okkar

Þetta gæti aðeins verið ástæða til að velja Alamofire og gera líf þitt auðveldara. Með því að nota URLSession ertu líklega að búa til eigin umbúðir sem krefst viðhalds og prófa. Í fyrstu gæti þetta virst vera betri ákvörðun miðað við að bæta við nýju ósjálfstæði, en þegar verkefni þróast gæti það auðveldlega verið að eigið netlag þróast og verður flóknara.

Hversu slæmt væri það að bæta við Alamofire sem ósjálfstæði?

Við skulum gera það ljóst að þú verður að vera varkár þegar þú bætir utanaðkomandi ósjálfstæði við verkefnið þitt. Þegar það er ekki viðhaldið, prófað eða ekki notað mikið, getur það bætt hugsanlega áhættu fyrir verkefnið þitt. Í lokin gætirðu þurft að halda áfram þróuninni sjálfur.

Ef um er að ræða Alamofire þarftu ekki að hafa áhyggjur af því. Ramminn er vel viðhaldinn, prófaður og notaður. Ramminn er nokkuð lítill og gerir það leiðinlegri til að skrifa beiðnir um net.

Ályktun: Hvernig á að taka ákvörðunina?

Alamfore er oft borið saman við AFNetworking, markmiðið-C samsvarandi ramma fyrir netkerfi. Á þeim tíma, net var miklu erfiðara án URLSession API sem er aðeins til síðan iOS 7. Þess vegna var miklu augljósara að velja fyrir ramma eins og AFNetworking til að gera líf þitt aðeins auðveldara.

Nú á dögum, þegar litið er á APISession API, sem til eru, er mun auðveldara að byggja upp netbeiðnir. Hins vegar mun það líklega færa þig í átt að því að byggja upp þitt eigið netlag ofan á URLSession. Prófa þarf þetta lag og getur hugsanlega vaxið í átt að flóknara lagi þegar verkefni þitt þróast.

Með það í huga, með því að taka þá staðreynd að Alamofire er vel viðhaldið og notað af mörgum verkefnum, þá spararðu þér sennilega mikla fyrirhöfn og tíma með því að bæta við Alamofire sem ósjálfstæði.

Þessi bloggfærsla er að bera saman URLSession og Alamofire 5, sem er í beta um þessar mundir þegar þetta er skrifað. Þú getur lesið meira um þessa útgáfu hér.

Upphaflega birt á SwiftLee.

Fleiri færslur og uppfærslur: @twannl