Table of Contents
Alamofire-hankkeen aloittaminen
Aloita Alamofire-paketin integrointi iOS-projektiin, voit lisätä kirjaston käyttämällä Swift Package Manager, CocoaPods, tai Carthage. Swift Pakettipäällikkö on suositeltava lähestymistapa, koska se on rakennettu Xcode. Lisää Alamofire-paketti navigointi []Tiedosto[[]]Lisää paketit[] ja syötä arkistoon URL ]. Määritä versio 5.0.0 tai uudempi. Vaihtoehtoisesti, jos käytät CocoaPodeja, lisää podfileisi ja suorita [. Kun riippuvuus on integroitu, tuo Alamofire tahansa Swift-tiedostoon, jossa tarvitset verkkotoimintoja:
import Alamofire
Alamofire.s alias tarjoaa kätevän sisäänkäynnin kaikille yhteisille HTTP-toiminnoille. Hupun alla se käyttää Apple. mutta abstraktit pois kattilalevyä kuten jononhallinta, parametrikoodaus ja vastausvalidointi. Näin voit keskittyä liiketoimintalogiikkaan sen sijaan, että verkottaisit putkistot. Lisätietoja taustalla olevasta verkkokerroksesta on Apple.
Suoritetaan hakupyyntöjä
Tietojen hakeminen RESTful-päätetapahtumasta on yleisin toiminto. Alamofire tekee GET-pyynnöistä tiiviin ja luettavan. Seuraava esimerkki hakee käyttäjäluettelon hypoteettisesta API:stä:
AF.request("https://api.example.com/users")
.validate()
.responseDecodable(of: [User].self) { response in
switch response.result {
case .success(let users):
print("Fetched \(users.count) users")
case .failure(let error):
print("Request failed with error: \(error)")
}
}
Huomaa :n käyttö, joka hyödyntää Swift.s -protokollaa automaattisesti JSONin luokittelemiseksi mallikohteiksi. Määrittele :n mukainen rakenne, joka vastaa []:a (tai []]:a. Tämä lähestymistapa poistaa manuaalisen JSON-sarjan ja parantaa tyypin turvallisuutta.
Lisäämällä kyselyparametreja ja otsikoita
Monet REST-rajapinta-aPI:t vaativat kyselyparametreja tai mukautettuja HTTP-otsikkoja. Alamofire hyväksyy parametrit sanakirjaksi ja käsittelee koodausta automaattisesti GET-pyyntöjä varten (parametrit on liitetty URL:iin). Otsikot lisätään parametrin kautta:
let parameters: Parameters = ["page": 1, "limit": 20]
let headers: HTTPHeaders = [
"Authorization": "Bearer YOUR_TOKEN",
"Accept": "application/json"
]
AF.request("https://api.example.com/users",
parameters: parameters,
headers: headers)
.validate()
.responseDecodable(of: [User].self) { response in
// handle response
}
Alamofire automaattisesti URL-koodaa parametrit ja liittää ne pyyntö URL. Omaa koodausta varten voit määrittää nimenomaisen esimerkki, kuten .
Vasteen validointi
-menetelmä tarkistaa automaattisesti HTTP-statuskoodit 200... ja hylkää vastaukset, joiden sisältötyyppi ei ole hyväksyttävä. Voit myös lisätä mukautetun validointikriteerit. Esimerkiksi hyväksyä vain 200 ja 201 tilakoodia:
.validate(statusCode: [200, 201])
Validointivirheet ilmoitetaan virheinä vastekäsittelijässä, jolloin voit suorittaa johdonmukaisen virhekäsittelyn koko sovelluksen ajan.
Lähetetään postitietoja
Resurssien luominen tai päivittäminen edellyttää tyypillisesti POST-pyyntöä, jossa on pyyntö. Alamofire tukee useita koodausstrategioita, joissa on REST-rajapinta. Seuraava esimerkki lähettää uuden käyttäjäobjektin palvelimelle:
let newUser: [String: Any] = [
"name": "Jane Doe",
"email": "[email protected]"
]
AF.request("https://api.example.com/users",
method: .post,
parameters: newUser,
encoding: JSONEncoding.default)
.validate()
.responseDecodable(of: User.self) { response in
switch response.result {
case .success(let createdUser):
print("User created: \(createdUser)")
case .failure(let error):
print("Error creating user: \(error)")
}
}
Jos API odottaa URL-koodattua muotoa (esim. OAuth-potence-vaihtoa varten), käytä sen sijaan . Tiedostolatausten tai sekatietojen osalta Alamofire tarjoaa , joka laatii moniosaisen pyynnön. Esimerkki:
AF.upload(multipartFormData: { multipartFormData in
multipartFormData.append(Data("Jane Doe".utf8), withName: "name")
multipartFormData.append(imageData, withName: "avatar", fileName: "avatar.jpg", mimeType: "image/jpeg")
}, to: "https://api.example.com/users")
.validate()
.responseDecodable(of: User.self) { response in
// handle response
}
Työskentely muiden HTTP-menetelmien kanssa
RESTful API usein vaativat PUT (täydellinen päivitys), PATCH (osittainen päivitys), ja DELETE (poistaminen) toiminnot. Alamofire käsittelee näitä samalla menetelmä; yksinkertaisesti muuttaa parametri.
PUT ja PATCH
Olemassa olevan resurssin päivittämiseksi käytetään tai . Pyynnön esittävä elin sisältää päivitetyt kentät:
let updatedFields: [String: Any] = ["name": "Jane Smith"]
AF.request("https://api.example.com/users/123",
method: .patch,
parameters: updatedFields,
encoding: JSONEncoding.default)
.validate()
.responseDecodable(of: User.self) { response in
// handle updated user
}
KUOLE
Resurssin poistaminen ei yleensä edellytä pyyntöelintä. Vastaus voi olla tyhjä tai palauttaa vahvistusviestin:
AF.request("https://api.example.com/users/123",
method: .delete)
.validate()
.response { response in
if let error = response.error {
print("Delete failed: \(error)")
} else {
print("User deleted successfully")
}
}
Tarkista aina API-dokumentit odotetuista tilakoodeista (esim. 204 Ei Sisällön).
Edistynyt virheiden käsittely ja verkon seuranta
Vahva virhekäsittely on saumattoman käyttökokemuksen kannalta ratkaisevan tärkeää. Alamofire raportoi virheitä -tyypin kautta, joka erottaa toisistaan verkkovirheet (timeout, no connect), palvelimen virheet (paha tilakoodi) ja sarjan virhetilan (epäkelpo JSON). Voit tarkastaa virheen antaaksesi tietyn palautteen:
switch response.result {
case .success(let value):
// handle success
case .failure(let error):
if let afError = error.asAFError {
switch afError {
case .sessionTaskFailed(let sessionError):
print("Network issue: \(sessionError.localizedDescription)")
case .responseValidationFailed(let reason):
print("Validation failed: \(reason)")
default:
print("Other Alamofire error: \(afError.localizedDescription)")
}
}
}
Verkon saatavuus
Ennen pyyntöjen tekemistä kannattaa tarkistaa verkon saatavuus. Alamofire. seuraa yhteyksien muutoksia. Aloita seuranta sovelluksen elinkaaren alkupuolella:
let reachabilityManager = NetworkReachabilityManager()
reachabilityManager?.startListening { status in
switch status {
case .notReachable:
print("Network is not reachable")
case .reachable(.cellular):
print("Connected via cellular")
case .reachable(.ethernetOrWiFi):
print("Connected via WiFi")
case .unknown:
print("Unknown status")
}
}
Käytä tätä ilmoittaaksesi käyttäjälle tai lykätäksesi pyyntöjä. Kehittyneempien mallien osalta harkitse tavoittavuuden yhdistämistä uudelleenkäyttömekanismiin, kuten epäonnistuneiden pyyntöjen uudelleenhakua, kun yhteys palautetaan.
Parhaat käytännöt tuotannon ja valmiiden verkkojen luomiseksi
Seuraamalla vakiintuneita kuvioita pitää verkkokerros ylläpidettävissä, turvallinen, ja performant.
1. Hyväksy koodattavat mallit
Määrittele aina :n mukaiset Swift-tyypit (tai ]) vasteiden jäsentämistä varten. Tämä poistaa manuaalisen JSON-manipuloinnin ja vähentää vikoja. Käytä :a tai alatason ]:a, jos tarvitset dynaamista sisältöä. Apple.[]:akoodattava opas[ kattaa edistyneen kartoituksen mukautetuilla avaimilla.
2. Turvallisempi aitous ja Token Management
Älä koskaan käytä kovaa koodia API- avaimet tai rahakkeet. Säilytä herkät arvot avainketjussa ja kiinnitä ne pyyntöihin [ otsikon kautta. Ottakaa käyttöön virkistyssieppauslaite. Alamofire-kirjat -protokollan avulla voit automaattisesti toistaa pyyntöjä uuden token saamisen jälkeen.
class AuthInterceptor: RequestInterceptor {
func adapt(_ urlRequest: URLRequest, for session: Session, completion: @escaping (Result<URLRequest, Error>) -> Void) {
var request = urlRequest
request.setValue("Bearer \(token)", forHTTPHeaderField: "Authorization")
completion(.success(request))
}
func retry(_ request: Request, for session: Session, dueTo error: Error, completion: @escaping (RetryResult) -> Void) {
// Check if error is 401, refresh token, then retry
completion(.retryWithDelay(1.0))
}
}
3. Valuutan kanssa async / odottaa
Alamofire 5 tukee täysin Swift.s concurrency-mallia. Käytä versioita pyyntömenetelmistä kirjoittaa puhtaampaa, lineaarista koodia:
do {
let users = try await AF.request("https://api.example.com/users")
.serializingDecodable([User].self)
.value
print("Users: \(users)")
} catch {
print("Error: \(error)")
}
Yhdistä tämä jäsenneltyyn valuuttaan (tehtäväryhmiin, toimijoihin) hallitaksesi useita pyyntöjä ja välttääksesi soittoa helvettiin.
4. Toteuta välimuisti
Verkkopuhelujen vähentämiseksi ja offline-tuen parantamiseksi, määrittele välimuistin käyttötavat. Alamofire noudattaa :a (esim. ). Voit myös käyttää omaa :a, jolla on asianmukainen levykapasiteetti:
let cache = URLCache(memoryCapacity: 10 * 1024 * 1024,
diskCapacity: 50 * 1024 * 1024,
diskPath: "networking_cache")
let session = Session(configuration: URLSessionConfiguration.default)
session.sessionConfiguration.urlCache = cache
5. Testaa verkkotasosi
Kirjoita API-asiakkaillesi testattavia laitekoneita käyttäen. Alamofire. [] voidaan ruiskuttaa ennalta määriteltyjä vastauksia palauttavalla pilkkaprotokollalla. Harkitse esimerkiksi kirjastojen käyttöä [ tai sisäänrakennettua abstraktiota. Testaus varmistaa virhekäsittelysi ja jäsentelylogiikkasi oikeiksi ilman, että osut todellisiin päätepisteisiin.
6. Käytä keskitettyä verkkohallintaa
Luo yksi luokka, jossa on yksi esimerkki, jossa on perus URL, otsikot, sieppaajat ja jaettu välimuisti. Tämä estää päällekkäisyyksiä ja tekee käytännöistä helppoja vaihtaa tai pilkata koko kerrosta. Esimerkki:
class APIClient {
static let shared = APIClient()
private let session: Session
private init() {
let config = URLSessionConfiguration.default
config.timeoutIntervalForRequest = 30
config.urlCache = URLCache.shared
session = Session(configuration: config, interceptor: AuthInterceptor())
}
func fetchUsers() async throws -> [User] {
return try await session.request("\(baseURL)/users")
.serializingDecodable([User].self)
.value
}
}
Jotta verkkomallit ymmärrettäisiin kattavasti, Alamofire Advanced Useage Documentation. Lisäksi REST API-opetusohjelma restfulapi.netissä tarjoaa arvokkaita oivalluksia kestävien sovellusrajapintojen suunnitteluun.
Noudattamalla näitä ohjeita ja hyödyntämällä Alamofirea ilmaiseva API, voit rakentaa verkkokerros, joka on sekä tehokas ja helppo ylläpitää. Kirjasto abstraktit pois monet ikävystyttävät näkökohdat URL latauksen samalla antaa sinulle täyden hallinnan, kun tarvitset sitä.