Network Layer đơn giản Swift

Trước khi đọc tiếp về topic này bạn cần tìm hiểu trước những kiến thức này:

  • Swift Language (cái này thì chắc chắn rồi)
  • Protocol Oriented Programming : Đây là key của topic này sẽ focus vào protocol để tạo lớp network layer
  • URLSession, URLRequest: Ở đây mình không dùng ALamofire hoặc AFNetwork vì chủ yếu demo đơn giản nếu cần thì bạn có thể thay bằng các Third-Party trên
  • Generic Protocol : có thể tìm hiểu thêm ở đây https://blog.bobthedeveloper.io/generic-protocols-with-associated-type-7e2b6e079ee2

Bắt đầu bằng một số Enum

Request : Mình sẽ tạo một Struct và chứa những gì cần thiết cho việc thực hiện một request

VAService: Phần chính của Network layer, ở đây sẽ sử dụng ‘associatedtype’ dùng để tạo Generic Type cho response và RequestData cho phần request

NetworkDispatcher

Implement NetworkDispatcher ở đây mình sẽ dùng URLSession nên sẽ tạo 1 struct URLSessionNetworkDispatcher

Gom tất cả lại bằng extension Protocol

  • NetworkDispatcher default sẽ là URLSessionNetworkDispatcher, nếu mình dùng Alamofire hoặc AFNetwork thì có thể tạo thêm một Implement khác của NetworkDispatcher ví dụ AlamofireNetworkDispatcher, đây là lý do tại sao mình tạo NetworkDispatcher là Protocol
  • onSuccess: Response Type đây là Generic đã tạo ở phần Response ở trên — onError: Error dùng để xuất lỗi
  • Dùng dispatcher gọi hàm dispatch để thực thi việc gọi request và nhận response
  • Dùng JSONDecoder để decode ResponseType từ data -> đây là lý do mình để ResponseType implement Codable
  • DispatchQueue.main để đảm bảo threadsafe

Sử dụng VAService

  1. Tạo một Struct như một Entity cho việc hứng data response
  2. Tạo một Struct kế thừa VAService, khai báo ResponseType là Struct vừa mới tạo
  3. Khởi tạo Struct kế thừa VAService và gọi execute()

Mình dựa theo bài của 1 anh bên này : https://medium.com/ios-os-x-development/minimal-networking-layer-from-scratch-in-swift-4-a151af786dc5