เริ่มด้วยอลาโมไฟร์

เพื่อเริ่มการรวม Alamofire เข้าในโครงการ ISOS ของคุณ คุณสามารถเพิ่มไลบรารีโดยใช้โปรแกรมจัดการแพกเกจสวิฟต์, catapoids, หรือ Carthage, เครื่องมือจัดการแพกเกจสวิฟต์ คือวิธีแนะนําที่สร้างขึ้นใน Xcode เพิ่มแพกเกจ Alasoft ให้ [FTL: 0] FOT: [FTT: 2] [FT] แพกเกจ [FLT] [FLT] และเข้าใช้ที่อยู่ URL [0] รุ่น 0 หรืออื่น ๆ ก็ได้ ถ้าคุณใช้ softoa (Fovah] off [FTLL] off [LELLLFLFL] และ file] สืบค้นเมื่อมีการติดตั้ง เครือข่ายที่: FLFLFLFLFLFLFLFLFSFLEFLFLLNFLNFLFEKLNFLEKLLNKLNKLLEKLEKLEKLEKEKEKEKESTEKKEKLNKLGNKLEGEKLNKEGEGNKEG

import Alamofire

Almofire [FLT: 4] นามแฝงนี้จะให้ข้อมูลที่สะดวกสําหรับปฏิบัติการ HTTP ทั่ว ๆ ไปทั้งหมด ภายใต้ฝาครอบนี้ใช้ของแอปเปิล (FLT: 5) แต่นามธรรมที่กระจายออกไปเหมือนการจัดการคิว, การเข้ารหัสแบบพารามิเตอร์, และการตรวจสอบการทํางานแบบตอบสนอง สิ่งนี้ช่วยให้คุณสามารถเน้นในตรรกะทางธุรกิจแทนการใช้ระบบประปา สําหรับรายละเอียดเพิ่มเติมที่อยู่บนชั้นเครือข่าย ให้อ้างอิงถึง [FLT: 0] เอกสารของ Applections [FLLLFSP].

การ ทํา ตาม คํา ขอ

การดึงข้อมูลจากจุดปลายแบบ RESTD เป็นปฏิบัติการทั่วไปมากที่สุด แอลาโมไฟร์ทําให้การร้องขอแบบเร็วและอ่านง่าย ตัวอย่างหนึ่งต่อไปนี้จะเรียกรายการผู้ใช้จากโปรแกรม API:

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)")
 }
 }

โปรดสังเกตว่า [FLT: 7] ซึ่งต่อรองกับ สวิฟท์ [FLT: 8] โปรโตคอลในการวิเคราะห์ Json โดยอัตโนมัติ ให้ระบุ [FLT: 9] กําหนดโครงสร้างที่สอดคล้องกับ [FLT: 10] (หรือ[FT: 11]] วิธีนี้จะกําจัดอุปกรณ์แบบ Jsononization และปรับปรุงความปลอดภัยแบบตัวพิมพ์แข็งได้

กําลังเพิ่มการค้นหาพารามิเตอร์และส่วนหัว

RIST หลาย APII ต้องการพารามิเตอร์สําหรับสอบถามหรือส่วนหัวแบบ HTTP ที่กําหนดเอง พารามิเตอร์ยอมรับแบบพจนานุกรมและจัดการการเข้ารหัสสําหรับร้องขอแบบ get (เติมข้อมูลในแนวตั้งคือที่อยู่ URL) ส่วนหัวจะถูกเพิ่มผ่านทางพารามิเตอร์ [FLT: 12]:

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 โดยอัตโนมัติ encodes พารามิเตอร์และเชื่อมต่อมันไปยังที่อยู่ URL ที่ร้องขอ สําหรับการเข้ารหัสเอง คุณสามารถกําหนดรหัสได้โดยตรง [FLT: 14] เป็นต้น ไป เช่น [FLT: 15].

การตรวจสอบความถูกต้องของเสียง

[FLT: 16] วิธีการตรวจสอบรหัสสถานะ HTTP โดยอัตโนมัติ ในระยะ 200-1299 และปฏิเสธการตอบสนองที่มีชนิดของเนื้อหาที่ไม่สามารถยอมรับได้ นอกจากนี้คุณยังยังสามารถเพิ่มค่าการตรวจสอบได้อีกด้วย ตัวอย่างเช่น การยอมรับรหัสสถานะแค่ 200 และ 201:

.validate(statusCode: [200, 201])

เกิดข้อผิดพลาดในการตรวจสอบได้แจ้งว่ามีการผิดพลาดในโปรแกรมจัดการการตอบรับ ซึ่งจะช่วยให้คุณสามารถจัดการข้อผิดพลาดได้ตลอดทั้งโปรแกรม

กําลังส่งข้อมูล POS

การสร้างหรือปรับปรุงทรัพยากร มักต้องการข้อมูล POST ที่ต้องการโดยใช้ตัวจําลอง Almofire รองรับกลวิธีการเข้ารหัสหลายแบบ โดย [FLT: 18] จะเป็นการทั่วไปที่สุดสําหรับ RIST ตัวอย่างของการส่งวัตถุผู้ใช้ใหม่ไปยังเซิร์ฟเวอร์:

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)")
 }
 }

หาก API ต้องการข้อมูลรูปแบบรูปแบบรูปแบบ (เช่น สําหรับการแลกเปลี่ยนเครื่องหมาย OAuth), ใช้ [FLT: 20] แทน สําหรับอัปโหลดหรือข้อมูลผสม Almofire จะให้ [FT: 21] ซึ่งสร้างการร้องขอหลายส่วน ตัวอย่าง:

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
 }

การ ทํา งาน กับ วิธี อื่น ๆ ของ HTTP

เอพีเอสที่มักใช้เอพีเอทีเอ็ม (ปรับปรุงเต็ม), PATCH (ส่วนปรับปรุง), และ DELETE (การแก้ใหม่). almofire จัดการกับสิ่งเหล่านี้ด้วยวิธีการเดียวกัน [FT:23]; แค่เปลี่ยนพารามิเตอร์ [FLT: 24].

โทนสีและพัทช์

เพื่อปรับปรุงทรัพยากรที่มีอยู่ ให้ใช้ [FLT: 25] หรือ[FLT: 26]. ร่างที่ร้องขอมีสนามปรับปรุง:

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
 }

DELETE

การลบทรัพยากรโดยทั่วไปไม่ต้องการร่างกายที่ร้องขอ การตอบรับอาจจะว่างหรือตอบกลับข้อความยืนยัน:

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")
 }
 }

เช็กเอกสาร API เสมอ สําหรับรหัสสถานะที่คาดหวัง (เช่น 204 ไม่มีเนื้อหา).

ข้อผิดพลาดขั้นสูง

ข้อผิดพลาดของ Robust เข้มงวดกับประสบการณ์ของผู้ใช้ที่ไม่มีการป้องกัน Almofire รายงานข้อผิดพลาดผ่านประเภท [FLT: 29] ซึ่งแยกความแตกต่างระหว่างข้อผิดพลาดของเครือข่าย (หมดเวลา, ไม่เชื่อมต่อ), ข้อผิดพลาดของเซิร์ฟเวอร์ (รหัสสถานะไม่ดี), และความล้มเหลวในการทําการเชื่อมต่อ (ไม่แน่นอน Json) คุณสามารถตรวจสอบข้อผิดพลาดเพื่อแจ้งข้อมูลได้:

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)")
 }
 }
}

การใช้งานเครือข่าย

ก่อน ขอ รับ คํา ขอ คุณ อาจ ต้องการ ตรวจ สอบ ว่า มี โอกาส ที่ จะ เข้า ไป ดู เครือ ข่าย ที่ คุณ จะ ทํา ได้.

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")
 }
}

ใช้นี่เพื่อแจ้งให้ผู้ใช้ทราบหรือหน่วงเวลาการร้องขอ สําหรับรูปแบบที่สูงขึ้น ให้พิจารณาการรวมความจุในการใช้งานกับกลไกการปรับเทียบใหม่ เช่น การพยายามแก้ไขการร้องขอล้มเหลวเมื่อเชื่อมต่อแล้ว

การฝึกฝนที่ดีที่สุดสําหรับเครือข่ายที่อ่านได้โดยเพิ่มประสิทธิภาพ

การ ทํา อย่าง นี้ จะ ช่วย รักษา ชั้น เครือ ข่าย สังคม ของ คุณ ให้ คง อยู่ ได้, มั่นคง, และ ทํา งาน ได้.

1. รับลูกบุญธรรมแบบแบบแบบแบบแบบแบบแบบเรียงได้

นิยามประเภทวิฟต์ที่สอดคล้องกับ เสมอ (หรือ) สําหรับการตอบรับนี้จะกําจัดการปรับเปลี่ยนแบบคู่มือ JONson และลดข้อผิดพลาดได้ ใช้ [FLT: 35] หรือระดับล่าง หากคุณต้องการเนื้อหาแบบไดนามิค มัคคุเทศก์ [FLT: 0] ของแอปเปิล [FLT] ครอบคลุมการจับคู่แบบขั้นสูงด้วยปุ่มกําหนดเอง

2. การตรวจสอบสิทธิ์ความปลอดภัยและการจัดการ token

ไม่ใช้ปุ่มพิมพ์ API หรือเครื่องหมาย API เก็บค่าความไวในคีย์ชิน และแนบมันเข้าไปในการร้องขอผ่านทางส่วนหัว [FLT: 37] สําหรับ OAUT การไหลของ OAUT นั้น ปรับใช้ตัวดักจับที่รีเฟรช โพรโทคอล (FLT: 38) ของ Alamofire จะอนุญาตให้คุณทําการลองใหม่โดยอัตโนมัติ หลังจากได้ค่าสัญลักษณ์แล้ว ตัวอย่าง:

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. ค่าคงที่พร้อม acync/awated

Alamofire 5 สนับสนุนโมเดลความต่อเนื่องของสวิฟต์อย่างเต็มรูปแบบ ใช้ รุ่นของวิธีการร้องขอการเขียนโค้ดที่สะอาด, เชิงเส้น:

do {
 let users = try await AF.request("https://api.example.com/users")
 .serializingDecodable([User].self)
 .value
 print("Users: \(users)")
} catch {
 print("Error: \(error)")
}

รวม เอา เรื่อง นี้ เข้า กับ ความ ไม่ เสมอ ภาค ที่ มี โครง สร้าง เป็น ปม (กลุ่ม ที่ ทํา งาน ไม่ เต็ม เวลา, นักแสดง) เพื่อ จัด การ กับ คํา ขอ หลาย อย่าง และ หลีก เลี่ยง นรก ที่ เรียก ว่า นรก.

4. การชลประทาน

เพื่อลดการเรียกของเครือข่าย และปรับปรุงการรองรับแบบออฟไลน์ ให้ปรับแต่งนโยบายการ cathing. Almofire เคารพ (เช่น . คุณสามารถใช้ข้อกําหนดกําหนดเอง ได้ด้วย

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. ตรวจ ดู ชั้น ต่าง ๆ ของ คุณ ใน เครือ ข่าย

เขียนการทดสอบหน่วยสําหรับลูกข่าย API ของคุณโดยใช้ข้อมูลแบบหลอก ๆ ของ Alamofire สามารถจะถูกฉีดด้วยโพรโทคอลการเยาะเย้ยที่ส่งกลับค่าการตอบสนองที่กําหนดล่วงหน้าได้ ลองพิจารณาโดยใช้ไลบรารีเช่น [FT: 47] หรือสร้าง [FLT: 48] นามธรรม การทดสอบตรวจสอบให้แน่ใจว่าคุณจัดการผิดพลาดและแก้ตรรกะของคุณถูกต้อง โดยไม่ต้องกดจุดสิ้นสุดจริง

6. ใช้ตัวจัดการเครือข่ายส่วนกลาง

สร้างคลาส ที่ปรับแต่ง [FLT: 50] ให้เป็นคลาสที่มีตําแหน่งพื้นฐาน, headers, sections และแคชร่วม ซึ่งจะป้องกันการจําลองและทําให้ง่ายในการสลับนโยบาย หรือล้อเลียนทั้งชั้น ตัวอย่าง:

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
 }
}

สําหรับความเข้าใจอย่างครอบคลุมเกี่ยวกับรูปแบบเครือข่ายนี้ ให้อ้างอิงถึง [FLT: 0] เอกสารเกี่ยวกับการใช้อุปกรณ์ขั้นสูง นอกจากนี้ APISTIST STIST STRIST STEREST at resentat resentive.net เสนอความเข้าใจอันทรงคุณค่าในการออกแบบ API.

ห้อง สมุด นี้ ช่วย ขจัด แง่ มุม ที่ น่า เบื่อ หลาย อย่าง ของ การโหลด ที่ อยู่ อาศัย ขณะ ที่ คุณ ควบคุม ได้ เต็ม ที่ เมื่อ คุณ ต้องการ.