Table of Contents
Bắt đầu với trận Alamo
Để bắt đầu kết hợp trận Alamo vào dự án iOS của bạn, bạn có thể thêm thư viện bằng cách sử dụng bộ quản lý gói “WLT: 1) [FLT1], hoặc Cardm [FLT2] Trình quản lý gói [FLL:] tiến trình tiến hành [FT:3] và nhập vào địa chỉ Mạng [FLT]. Hãy xác định phiên bản 5. 0. Nếu bạn không dùng khả năng thêm [FLT] [FLT] và tập tin t: nơi cần nhập khẩu, thì có thể chọn; khi nào thì chọn [FLT] và dùng tập tin t.
import Alamofire
Dưới vỏ bọc, nó dùng [FLT:] bí danh để tạo một điểm tiện lợi cho mọi hoạt động chung của HTTP.
Thực hiện yêu cầu get
Thu thập dữ liệu từ điểm cuối đáng kinh ngạc là hoạt động phổ biến nhất. Alamofire làm cho yêu cầu trở nên ngắn gọn và dễ đọc. Ví dụ sau đây lấy danh sách người dùng từ giả thuyết ARI:
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)")
}
}
Hãy chú ý cách dùng , phương pháp này có thể đẩy mạnh giao thức ) của để tự động phân tích JSON thành các vật mẫu.
Đang thêm tham số và đầu đề
Nhiều hệ thống ARIT yêu cầu tham số truy vấn hay tùy thích HTTP. Alamofire chấp nhận tham số như là từ điển và xử lý mã hoá tự động cho yêu cầu lấy (các tham số được phụ thêm vào URL). Đầu đề được thêm vào tham số :
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
}
Tổ chức Alamo tự động mã hoá các tham số và gắn chúng vào yêu cầu URL. Để có mã hóa tự chọn, bạn có thể xác định một ví dụ , như .
Kiểm tra phản ứng
Phương pháp tự động kiểm tra mã trạng thái HTTP trong phạm vi 200–299 và từ chối đáp ứng với một kiểu nội dung không thể chấp nhận. Bạn cũng có thể thêm các tiêu chuẩn xác thực tự chọn. Lấy thí dụ, chỉ chấp nhận 200 và 201 trạng thái:
.validate(statusCode: [200, 201])
Các lỗi kiểm tra được báo cáo là lỗi trong bộ quản lý đáp ứng, cho phép bạn thực hiện lỗi nhất định xử lý trong ứng dụng của bạn.
Đang gửi dữ liệu PST
Việc tạo hay cập nhật tài nguyên thường đòi hỏi một yêu cầu POR với một cơ quan yêu cầu. Alamofire hỗ trợ nhiều chiến lược mã hóa, với là phổ biến nhất cho hệ thống ATI. Ví dụ sau gửi một đối tượng người dùng mới cho máy phục vụ:
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)")
}
}
Nếu hệ thống ARI mong đợi dữ liệu dạng dạng URL (v. d., cho giao diện đồ thị) dùng . Để tải lên tập tin hoặc trộn dữ liệu, Alamofire cung cấp để xây dựng một yêu cầu đa phần. Ví dụ:
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
}
Làm việc với những phương pháp HTTP khác
Các hệ thống ATI đáng yêu thường cần thiết cập nhật PUT ( đầy đủ), cập nhật phụ (theo tập đoàn), và DEME (removal). Pháo binh dùng cùng một phương pháp ; chỉ cần thay đổi tham số .
TIẾNG VÀ CÂU CHUYỆN
Để cập nhật một tài nguyên đã có, hãy dùng hoặc .
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
}
DELEE
Việc xoá tài nguyên thường không đòi hỏi một xác lập. Đáp ứng có thể trống hoặc trả lời một thông điệp xác nhận:
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")
}
}
Luôn luôn kiểm tra tài liệu về hệ thống mạng của máy tính để tìm mã trạng thái mong đợi (v. d., 204 no content).
Quản lý lỗi cấp cao và theo dõi mạng
Lỗi Robust là quan trọng cho một kinh nghiệm người dùng không thể ngắt. Alamo báo cáo lỗi qua kiểu , phân biệt lỗi mạng (thời hạn, không kết nối), lỗi máy chủ ( Mã trạng thái xấu) và lỗi tuần tự (invald JSON). Bạn có thể kiểm tra lỗi để cung cấp thông tin phản hồi cụ thể:
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)")
}
}
}
Name
Trước khi đưa ra yêu cầu, bạn có thể kiểm tra xem có sẵn mạng không.
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")
}
}
Dùng lệnh này để thông báo người dùng hay yêu cầu hoãn. Để có thêm các mẫu nâng cao, hãy xem xét việc kết hợp khả năng chạm lại với cơ chế thử lại, như việc thử lại yêu cầu bị lỗi khi kết nối được phục hồi.
Các thực hành tốt nhất cho mạng sản xuất
Theo những mẫu đã được thiết lập sẽ bảo toàn mạng lưới của bạn, bảo vệ và thực hiện được.
Nhận dạng biểu tượng
Luôn luôn xác định kiểu “Socket-xin ” phù hợp với (hoặc để giải quyết các vấn đề. Nó loại bỏ các lỗi hướng dẫn hoặc mức độ thấp nếu bạn cần nội dung năng động. Nó có thể phụ trách hướng dẫn [FL: 0] [FL: 0] của Apple [FL:] bao gồm các phím cao nhất.
Xác thực hơn và quản lý bị hạn chế
Không bao giờ mã ATI hay vật tượng trưng. Lưu giá trị nhạy cảm vào Keychain và gắn chúng vào yêu cầu qua bộ đầu . Đối với OAuth, hãy thực hiện một bộ chặn ngược kiểu thẻ tín hiệu. Giao thức (FLT:38] của Alamo
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. Sự đồng tình với một đồng nhất/một đợi
Tổ chức Alamo 5 hoàn toàn ủng hộ mô hình thống nhất của Tổng hợp đồng. Hãy dùng các phương pháp yêu cầu để viết mã rõ ràng, tuyến tính:
do {
let users = try await AF.request("https://api.example.com/users")
.serializingDecodable([User].self)
.value
print("Users: \(users)")
} catch {
print("Error: \(error)")
}
Kết hợp với sự đồng thuận có tổ chức (các nhóm, diễn viên) để quản lý nhiều yêu cầu và tránh gọi lại địa ngục.
4 Đau đớn
Để giảm cuộc gọi và cải tiến khả năng hỗ trợ ngoài mạng, hãy cấu hình chính sách lưu tạm. Alamo lửa tôn trọng khả năng . Bạn cũng có thể sử dụng tùy chọn với khả năng thích hợp.
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. Kiểm tra lớp mạng của bạn
Đơn vị ghi các thử nghiệm cho ứng dụng khách của bạn bằng dữ liệu giả. Tính năng trừu tượng của Alamo có thể được tiêm một giao thức giả định để trả lời các câu trả lời đã xác định trước. Hãy xem xét việc sử dụng thư viện như hoặc bản cấu trúc . Việc kiểm tra xem lỗi của bạn xử lý và phân tích là đúng mà không chạm đến điểm kết thúc thật.
6. Dùng bộ quản lý mạng trung tâm
Tạo một lớp mà cấu hình một với URL cơ bản, đầu đề, bộ chặn và bộ nhớ tạm dùng chung. Điều này ngăn cản sự lặp lại và dễ dàng thay đổi chính sách hoặc cười nhạo toàn bộ lớp. Ví dụ:
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
}
}
Để hiểu biết toàn diện về các mẫu mạng, hãy nhắc đến tài liệu cấp cao [FLT: 1]. Ngoài ra, ) Hướng dẫn viên về AFLT [FLT:] đưa ra những thông tin đáng giá về việc thiết kế các hệ thống ATI mạnh mẽ.
Bằng cách làm theo những chỉ dẫn và áp dụng các chỉ dẫn của nhóm ATI, bạn có thể xây dựng lớp mạng vừa mạnh vừa dễ duy trì.