Alamofire:Swift 网络请求这件事,它包了

做 iOS 开发的人,大概率听过 Alamofire。这项目在 GitHub 上有 4.2 万 Star,算是 Swift 生态里最老牌的网络库之一了。我最近重新看了下它的现状,发现这老项目活得比很多新项目都滋润。

正文顶部截图

它到底解决什么问题

简单说,Alamofire 把 iOS 原生的 URLSession 包了一层,让你写网络请求的时候少写很多样板代码。原生 URLSession 发一个请求,要创建 URLRequest、设置 HTTP 方法、处理回调、解析数据,一套下来几十行。用 Alamofire,几行搞定。

而且它不是简单的封装。链式调用、自动重试、请求拦截、证书锁定、网络状态监听,这些实际开发中经常用到的功能,它都内置了。

跨平台支持比你想的广

很多人以为 Alamofire 只能用在 iOS 上,其实不是。它支持的平台包括:

  • iOS 10.0 以上
  • macOS 10.12 以上
  • tvOS 10.0 以上
  • watchOS 3.0 以上
  • Linux
  • Windows
  • Android

当然,Linux、Windows 和 Android 上还有些功能缺失,比如证书锁定和部分认证方式用不了。但核心的请求和响应处理是没问题的。

README区域截图

Swift Concurrency 支持

Alamofire 从很早就开始跟进 Swift 的新特性。现在它完整支持 Swift Concurrency,也就是 async/await。发请求可以直接 await 拿结果,不用再写回调地狱那一套。

举个例子,用原生 URLSession 写一个带认证、带缓存、带重试的请求,代码量不小。用 Alamofire 的话,链式调用一行一行写下来,逻辑清晰,代码量少一半。

它同时也支持 Combine,所以不管你用哪种异步方案,都能接进去。

实际开发中的体验

我在几个项目里用过 Alamofire,说说感受。

好的方面:API 设计确实优雅,链式调用写起来很顺畅。错误处理也比较完善,网络超时、服务器返回非 200、JSON 解析失败,这些场景都有现成的处理方式。cURL 命令输出这个功能很实用,调试的时候直接复制到终端就能测。

不那么好的方面:库本身体积不小,如果你的项目只需要发几个简单的 GET 请求,引入 Alamofire 有点重。而且 Swift 5.5 之后 URLSession 原生也支持 async/await 了,轻量场景下原生方案够用。

怎么接入

支持三种主流的包管理工具:

Swift Package Manager:在 Package.swift 里加一行依赖就行。

CocoaPods:Podfile 里加 pod 'Alamofire'

Carthage:Cartfile 里加 github "Alamofire/Alamofire"

我个人推荐 Swift Package Manager,现在 Xcode 原生支持,不用装额外工具。

生态

Alamofire 还有两个配套库:AlamofireImage 处理图片下载和缓存,AlamofireNetworkActivityIndicator 控制 iOS 上的网络活动指示器。这两个库也是同一个团队维护的,质量有保障。

实际建议

如果你的 Swift 项目需要做网络请求,而且请求数量多、逻辑复杂,Alamofire 还是值得用的。它的 API 成熟度和社区支持在 Swift 网络库里是第一梯队。

但如果你只是发几个简单请求,原生 URLSession 配合 async/await 就够了,没必要引入整个库。

这项目维护了十年还在活跃更新,Swift 6 的兼容也做了。能活这么久的开源项目不多,说明它确实解决了实际问题。

要引入整个库。

这项目维护了十年还在活跃更新,Swift 6 的兼容也做了。能活这么久的开源项目不多,说明它确实解决了实际问题。

更多推荐