Alamofire: คืออะไร ฟังก์ชันของ HTTP-client และการใช้งานในการพัฒนา

ผู้แต่ง: IT Sectr เผยแพร่เมื่อ: 2026-05-04 เวลาอ่าน: 8 นาที

Alamofire เป็น HTTP-client สำหรับ iOS, macOS, tvOS และ watchOS ที่เขียนด้วยภาษา Swift ไลบรารีนี้จะทำงานอัตโนมัติในการเข้ารหัสพารามิเตอร์ การตรวจสอบความถูกต้องของการตอบกลับ และการทำให้ข้อมูลเป็นลำดับ ตามข้อมูลของ พื้นที่เก็บ Alamofire บน GitHub โปรเจกต์นี้ถูกใช้โดย กว่า 40,000 แอปพลิเคชันทั่วโลก Alamofire ถือเป็นมาตรฐานโดยพฤตินัยสำหรับการสื่อสารเครือข่ายในระบบนิเวศของ Apple

ประเด็นสำคัญ

  • Alamofire — HTTP-client โอเพนซอร์สใน Swift สำหรับแพลตฟอร์ม Apple
  • รองรับ เมธอด HTTP ทั้งหมด พารามิเตอร์ URL ส่วนคำขอ และการอัปโหลดแบบหลายส่วน
  • การตรวจสอบ การตอบกลับตามรหัสสถานะและเนื้อหาพร้อมการจัดการข้อผิดพลาดอัตโนมัติ
  • การจัดการ เซสชันผ่าน URLSession พร้อมการกำหนดค่าที่กำหนดเองและตัวสกัดกั้น
  • การบูรณาการ กับ Codable, Combine และ Swift Concurrency สำหรับการประมวลผลแบบอะซิงโครนัส

Alamofire คืออะไร?

Alamofire เป็นไลบรารีสำหรับทำงานกับคำขอ HTTP บนแพลตฟอร์ม Apple ที่เขียนด้วย Swift ทั้งหมด การพัฒนาเริ่มขึ้นในปี 2014 เพื่อเป็นทางเลือกแทนไลบรารี AFNetworking ใน Objective-C และกลายเป็นมาตรฐานสำหรับการสื่อสารเครือข่ายในชุมชน iOS อย่างรวดเร็ว

ไลบรารีสร้างขึ้นบนเฟรมเวิร์กระบบ URLSession โดยแยก API ระดับต่ำออกเป็นลูกโซ่เมธอดที่กระชับ Alamofire รองรับฟีเจอร์ทั้งหมดของ URLSession: เซสชันพื้นหลัง ตัวสกัดกั้นคำขอ ใบรับรอง SSL และวิธีการทำให้การตอบกลับเป็นลำดับหลายวิธี

ตาม Swift Package Index Alamofire อยู่ใน 10 แพ็คเกจ Swift ยอดนิยมที่มีดาวมากกว่า 45,000 ดาวบน GitHub ไลบรารีนี้เข้ากันได้กับ iOS 10+, macOS 10.12+, tvOS 10+ และ watchOS 3+

ข้อได้เปรียบหลักของ Alamofire เมื่อเทียบกับการใช้ URLSession โดยตรงคือ การลดโค้ดส่วนหัวที่ซ้ำซาก การเรียก AF.request เพียงครั้งเดียวแทนที่การกำหนดค่า URLSession ด้วยตนเอง การจัดการการตอบกลับ และการถอดรหัสข้อมูลจำนวน 15–20 บรรทัด ในขณะเดียวกัน ไลบรารียังคงความยืดหยุ่นอย่างเต็มที่สำหรับสถานการณ์ที่กำหนดเองผ่านเซสชันและส่วนขยายที่กำหนดเอง

คุณสมบัติหลักของ Alamofire

Alamofire มีฟังก์ชันเครือข่ายที่หลากหลายครอบคลุมสถานการณ์การพัฒนาแอปบนมือถือส่วนใหญ่ ด้วยสถาปัตยกรรมแบบโมดูลาร์ นักพัฒนาจำเป็นต้องรวมเฉพาะส่วนประกอบที่จำเป็นเท่านั้น

รองรับเมธอด HTTP ทั้งหมด

เมธอด HTTP GET, POST, PUT, PATCH, DELETE, HEAD, OPTIONS และ TRACE ถูกนำมาใช้ผ่าน API ที่เป็นหนึ่งเดียวกัน แต่ละเมธอดรับพารามิเตอร์คำขอ ส่วนหัว และส่งคืนการตอบกลับเป็นชนิด Result นักพัฒนาไม่ต้องกำหนดค่า URLSession ด้วยตนเอง — ไลบรารีจะทำโดยอัตโนมัติตามอาร์กิวเมนต์ที่ให้มา

การตรวจสอบความถูกต้องของการตอบกลับของเซิร์ฟเวอร์

การตรวจสอบ การตอบกลับใน Alamofire ช่วยให้ตรวจสอบรหัสสถานะและเนื้อหาการตอบกลับก่อนส่งข้อมูลไปยังแอปพลิเคชัน ไลบรารีรองรับเงื่อนไขการตรวจสอบที่กำหนดเองผ่าน closures ให้การควบคุมการจัดการข้อผิดพลาดอย่างเต็มที่ โดยค่าเริ่มต้น จะตรวจสอบเฉพาะรหัสสถานะ 200–299 เท่านั้น

การเข้ารหัสพารามิเตอร์อัตโนมัติ

พารามิเตอร์ จะถูกเข้ารหัสโดยอัตโนมัติขึ้นอยู่กับชนิดที่เลือก: การเข้ารหัส URL สำหรับคำขอ GET และการเข้ารหัส JSON สำหรับ POST Alamofire ยังรองรับการเข้ารหัส Property List และตัวเข้ารหัสที่กำหนดเองผ่านโปรโตคอล ParameterEncoder ซึ่งช่วยให้ปรับรูปแบบให้เข้ากับเซิร์ฟเวอร์ใดก็ได้

การจัดการเซสชันและตัวสกัดกั้น

เซสชัน ใน Alamofire ช่วยให้กำหนดค่ากำหนดเวลา ใบรับรอง SSL ส่วนหัว HTTP เริ่มต้น และพร็อกซี ตัวสกัดกั้น EventMonitor ช่วยให้ติดตามเหตุการณ์ในวงจรชีวิตของคำขอ: การสร้าง การส่ง การรับการตอบกลับ และการเสร็จสิ้น ซึ่งมีประโยชน์สำหรับการบันทึก วิเคราะห์ และแก้ไขปัญหาเครือข่ายในการผลิต

Alamofire ทำงานอย่างไร?

Alamofire ใช้สถาปัตยกรรมแบบ Session ที่ห่อหุ้มอินสแตนซ์ URLSession และการกำหนดค่าเครือข่าย แต่ละคำขอจะผ่านลูกโซ่ของตัวจัดการ: อะแดปเตอร์ นโยบายการลองใหม่ ตัวตรวจสอบความถูกต้อง และตัวทำให้เป็นลำดับ ซึ่งรับประกันความยืดหยุ่นและการขยายได้

โมเดล Session และ Request

ออบเจกต์ Session จัดการคำขอเครือข่ายทั้งหมดในแอปพลิเคชัน มันถูกสร้างขึ้นด้วยการกำหนดค่าที่มีกำหนดเวลา ส่วนหัวเริ่มต้น และใบรับรอง แต่ละการเรียก AF.request จะส่งคืน DataRequest ที่สามารถแก้ไขได้ก่อนส่ง Alamofire จัดการวงจรการคงอยู่โดยอัตโนมัติผ่านการอ้างอิงที่อ่อนแอไปยังเซสชัน ป้องกันการรั่วไหลของหน่วยความจำ

swift
import Alamofire

let session = Session(configuration: config)
session.request("https://api.example.com/users")
    .validate()
    .responseDecodable(of: [User].self) { response in
        switch response.result {
        case .success(let users):
            print("ได้รับ \(users.count) ผู้ใช้")
        case .failure(let error):
            print("ข้อผิดพลาด: \(error.localizedDescription)")
        }
    }

การติดตั้งและกำหนดค่า Alamofire

การติดตั้ง Alamofire ทำได้ผ่าน Swift Package Manager, CocoaPods หรือ Carthage วิธีที่แนะนำสำหรับโปรเจกต์ใหม่คือ SPM ซึ่งรวมอยู่ใน Xcode เนื่องจากไม่ต้องใช้เครื่องมือเพิ่มเติมและการบูรณาการทำได้ในไม่กี่คลิก

ผ่าน Swift Package Manager

การเพิ่ม แพ็คเกจ ใน Xcode ทำได้ผ่านเมนู File → Add Packages URL พื้นที่เก็บ: https://github.com/Alamofire/Alamofire แนะนำให้กำหนดรุ่นเป็นรุ่นเสถียรล่าสุด Alamofire ปฏิบัติตามการกำหนดรุ่นแบบความหมาย และการเปลี่ยนแปลงที่สำคัญทั้งหมดจะถูกบันทึกใน CHANGELOG

ผ่าน CocoaPods

CocoaPods ยังคงเป็นตัวเลือกยอดนิยมสำหรับโปรเจกต์ที่มีโครงสร้างพื้นฐานอยู่แล้ว เพิ่มบรรทัด pod 'Alamofire' ลงใน Podfile ของคุณแล้วรัน pod install Alamofire ไม่มีการพึ่งพาภายนอก ซึ่งช่วยลดความซับซ้อนในการบูรณาการและขจัดความขัดแย้งของรุ่นในโปรเจกต์ที่มีอยู่

ตัวอย่างการใช้งาน Alamofire

ตัวอย่าง ด้านล่างแสดงสถานการณ์การใช้งาน Alamofire ทั่วไปในแอปพลิเคชัน iOS: ตั้งแต่คำขอ GET ธรรมดาไปจนถึงการอัปโหลดไฟล์พร้อมการติดตามความคืบหน้า

คำขอ GET และการตอบกลับ JSON

คำขอ GET อย่างง่ายพร้อมพารามิเตอร์และการถอดรหัสการตอบกลับเป็นโมเดล Codable เป็นสถานการณ์การใช้งาน Alamofire ที่พบบ่อยที่สุดในแอปพลิเคชันมือถือ พารามิเตอร์จะถูกเข้ารหัสโดยอัตโนมัติและการตอบกลับจะถูกถอดรหัสผ่าน JSONDecoder โค้ดกระชับและอ่านง่าย

swift
struct User: Codable {
    let id: Int
    let name: String
    let email: String
}

AF.request("https://jsonplaceholder.typicode.com/users",
               method: .get)
    .validate()
    .responseDecodable(of: [User].self) { response in
        switch response.result {
        case .success(let users):
            print("ผู้ใช้: \(users.count)")
        case .failure(let error):
            print("ข้อผิดพลาด: \(error)")
        }
    }

คำขอ POST พร้อมเนื้อหา JSON

คำขอ POST พร้อมเนื้อหา JSON ใช้สำหรับสร้างทรัพยากรบนเซิร์ฟเวอร์ Alamofire จะเข้ารหัสออบเจกต์ที่ส่งผ่านโดยอัตโนมัติผ่าน JSONParameterEncoder ช่วยประหยัดนักพัฒนาจากการทำให้เป็นลำดับด้วยตนเอง การตอบกลับจะถูกถอดรหัสเป็นโมเดลข้อมูลโดยใช้ JSONDecoder เดียวกัน

swift
let newUser = User(id: 1,
                     name: "สมชาย ใจดี",
                     email: "ivan@example.com")

AF.request("https://jsonplaceholder.typicode.com/users",
               method: .post,
               parameters: newUser,
               encoder: JSONParameterEncoder.default)
    .validate()
    .responseDecodable(of: User.self) { response in
        if let created = response.value {
            print("สร้างผู้ใช้แล้ว: \(created)")
        }
    }

การอัปโหลดสื่อ

เมธอด upload ใน Alamofire รองรับการอัปโหลดไฟล์ ข้อมูล และฟอร์มหลายส่วน ไลบรารีจัดการความคืบหน้าโดยอัตโนมัติและช่วยให้ติดตามสถานะการอัปโหลดผ่าน closures uploadProgress ซึ่งสะดวกสำหรับการแสดงตัวบ่งชี้ความคืบหน้า

swift
let imageData = UIImage(named: "photo")?.jpegData(compressionQuality: 0.8)

AF.upload(imageData,
           to: "https://api.example.com/upload")
    .uploadProgress { progress in
        print("ความคืบหน้า: \(progress.fractionCompleted * 100)%")
    }
    .responseDecodable(of: UploadResponse.self) { response in
        print("อัปโหลดเสร็จสมบูรณ์")
    }

การจัดการข้อผิดพลาดและการตรวจสอบใน Alamofire

การจัดการ ข้อผิดพลาดใน Alamofire สร้างขึ้นจากการรวมกันของการตรวจสอบความถูกต้องของการตอบกลับและชนิด Result โมเดลข้อผิดพลาดประกอบด้วย AFError ซึ่งครอบคลุมสถานการณ์ความล้มเหลวของเครือข่ายทั่วไปทั้งหมด: หมดเวลา สูญเสียการเชื่อมต่อ ข้อผิดพลาดของเซิร์ฟเวอร์ และการทำให้เป็นลำดับล้มเหลว แต่ละกรณีจะถูกจัดการแยกกัน

สำหรับการลองใหม่หลังจากข้อผิดพลาด Alamofire มีกลไก RequestRetrier โปรโตคอลนี้กำหนดนโยบายการลองใหม่: จำนวนครั้งที่ลอง หน่วงเวลาระหว่างครั้ง และเงื่อนไขที่ทำการลองใหม่ ตัวอย่างเช่น เมื่อเกิดข้อผิดพลาด 503 ของเซิร์ฟเวอร์ สามารถลองคำขอใหม่หลังจาก 2 วินาที ในขณะที่ข้อผิดพลาด 401 สามารถขอโทเคนการรับรองความถูกต้องใหม่

วิธีการ AFError แบบแจงนับรับประกันว่านักพัฒนาจะไม่พลาดข้อผิดพลาดชนิดใด — คอมไพเลอร์ตรวจสอบความสมบูรณ์ของการจัดการ ทำให้โค้ดมีความน่าเชื่อถือและคาดเดาได้มากขึ้นเมื่อเทียบกับการจัดการข้อผิดพลาดผ่าน NSError ใน URLSession ดิบ

นโยบายการลองใหม่และคำขอซ้ำ

โปรโตคอล RequestRetrier กำหนดเมธอดลองใหม่ที่รับคำขอ เซสชัน ข้อผิดพลาด และ closure เสร็จสมบูรณ์ ในเมธอดนี้ นักพัฒนาจะตัดสินใจว่าจะลองคำขอใหม่หรือไม่และหลังจากหน่วงเวลาเท่าใด Alamofire มีการใช้งาน RetryPolicy ในตัวสำหรับสถานการณ์ทั่วไป แต่สำหรับโค้ดในระบบผลิต ขอแนะนำให้สร้างนโยบายที่กำหนดเองตามตรรกะทางธุรกิจ

AFError เป็นการแจงนับที่มีกรณีซ้อนสำหรับหมวดหมู่ข้อผิดพลาดต่างๆ นักพัฒนาสามารถจัดการแต่ละชนิดแยกกัน: สำหรับการหมดเวลา — ลองคำขอใหม่, สำหรับข้อผิดพลาดของเซิร์ฟเวอร์ — แสดงข้อความที่เข้าใจได้แก่ผู้ใช้ Alamofire รองรับนโยบายการลองใหม่ที่กำหนดเองผ่านโปรโตคอล RequestRetrier

การตรวจสอบ ในตัวจะตรวจสอบรหัสสถานะในช่วง 200–299 และชนิดเนื้อหาของการตอบกลับ สำหรับการตรวจสอบเพิ่มเติม สามารถเพิ่มเงื่อนไขที่กำหนดเองผ่าน closure validate ซึ่งช่วยให้ตรวจสอบตรรกะทางธุรกิจก่อนส่งข้อมูลไปยังชั้น UI

คำถามที่พบบ่อย

Alamofire แตกต่างจาก URLSession อย่างไร?

Alamofire มี API ระดับสูงกว่าเมื่อเทียบกับ URLSession ไลบรารีทำงานอัตโนมัติในการเข้ารหัสพารามิเตอร์ การตรวจสอบการตอบกลับ และการทำให้ข้อมูลเป็นลำดับ ในขณะที่ URLSession ต้องการการกำหนดค่าด้วยตนเองของแต่ละส่วนประกอบของคำขอเครือข่าย

สามารถใช้ Alamofire กับ SwiftUI ได้หรือไม่?

ได้ Alamofire เข้ากันได้อย่างสมบูรณ์กับ SwiftUI โดยทั่วไปคำขอจะดำเนินการภายใน ObservableObject หรือผ่าน async/awat โดยใช้ Task Alamofire ไม่พึ่งพา UIKit ดังนั้นจึงทำงานได้ดีในแอปพลิเคชัน SwiftUI สมัยใหม่

มีทางเลือกใดบ้างสำหรับ Alamofire?

ทางเลือกหลักของ Alamofire คือ: URLSession ในตัว, Moya (ชั้นเหนือ Alamofire พร้อมการแยก API), Networking โดย FreshOS และ Apollo GraphQL สำหรับทำงานกับเซิร์ฟเวอร์ GraphQL การเลือกขึ้นอยู่กับสถาปัตยกรรมของโปรเจกต์

Alamofire รองรับ Combine และ async/await หรือไม่?

Alamofire มีการบูรณาการในตัวกับ Combine ผ่านส่วนขยาย Publishers และรองรับ Swift Concurrency ผ่าน async/await ซึ่งช่วยให้เลือกวิธีการประมวลผลแบบอะซิงโครนัสที่ทันสมัยได้

วิธีตั้งค่าหมดเวลาของคำขอใน Alamofire?

การหมดเวลา กำหนดค่าผ่านการกำหนดค่า Session ตั้งค่าคุณสมบัติ timeoutIntervalForRequest และ timeoutIntervalForResource เมื่อสร้าง URLSessionConfiguration จากนั้นส่งต่อไปยังตัวเริ่มต้น Session ค่าเริ่มต้นคือ 60 วินาที

สรุป

  • Alamofire — HTTP-client มาตรฐานสำหรับ iOS, macOS, tvOS และ watchOS ใน Swift
  • ไลบรารี มี API ที่กระชับสำหรับเมธอด HTTP ทั้งหมดพร้อมการเข้ารหัสพารามิเตอร์อัตโนมัติ
  • การตรวจสอบ การตอบกลับและการจัดการข้อผิดพลาดถูกนำมาใช้ผ่าน AFError และชนิด Result
  • การติดตั้ง ผ่าน SPM, CocoaPods หรือ Carthage พร้อมรองรับแพลตฟอร์ม Apple ทั้งหมด
  • การบูรณาการ กับ Codable, Combine และ Swift Concurrency สำหรับการพัฒนาแบบอะซิงโครนัสสมัยใหม่
  • ประสิทธิภาพ ทำได้ผ่านสถาปัตยกรรมเซสชันน้ำหนักเบาที่ใช้ URLSession
  • ชุมชน กว่า 45,000 ดาวบน GitHub ทำให้เป็นหนึ่งในไลบรารี Swift ที่ได้รับความนิยมมากที่สุด

เราจะพัฒนาแอปพลิเคชันบนมือถือแบบครบวงจร

IT Sectr สร้างแอปพลิเคชัน iOS และ Android สำหรับสตาร์ทอัพและธุรกิจตั้งแต่ปี 2017 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ

ปรึกษาโครงการ

อ่านเพิ่มเติม