公司最近上线的新版审批系统,后台服务用的是 Swift。没错,就是那个很多人以为只能做 iOS App 的语言。实际上,Swift 在服务器端的稳定性已经足够支撑高并发的企业流程,而且开发效率比预想中高不少。
为什么选 Swift 做后端?
团队一开始也纠结过用 Node.js 还是 Go,但 Swift 的类型安全和现代语法让我们少写了很多防御性代码。比如处理表单提交时,结构体自动解析请求体,出错直接拦截,不用一层层手动校验字段。
struct ApprovalRequest: Codable {
let applicantID: String
let amount: Double
let reason: String
}
func handleApproval(_ req: Request) throws -> EventLoopFuture<HTTPStatus> {
let data = try req.content.decode(ApprovalRequest.self)
// 业务逻辑处理
}
这段代码在 Vapor 框架里跑得很稳,上线三个月没因为参数格式问题出过故障。相比之下,之前用 JavaScript 写的接口,总有同事忘记判空或者类型转换出错。
与前端共享数据模型
更省事的是,iOS 团队和我们共用一套实体定义。把核心 model 抽成独立的 Swift Package,前后端都引用它。改一个字段,两边同时生效,沟通成本明显下降。以前光对字段含义就要开两次会,现在 PR 里直接看代码就行。
异步任务不卡主线程
报销单上传附件后要走 OCR 识别,这种耗时操作我们用 Swift 的 async/await 包装成后台任务。主流程快速返回“已接收”,用户不用干等。任务失败也会自动重试三次,日志打到监控平台,运维半夜不用被叫起来重启服务。
await Task.detached {
do {
let result = try await ocrService.process(image)
try await saveToDatabase(result)
} catch {
await retryIfNeeded()
}
}
这套机制上线后,用户投诉“卡顿”的工单少了七成。财务部大姐说现在传完发票就能去泡咖啡,回来就看到结果了。
部署轻,启动快
Docker 镜像打包出来不到 80MB,Kubernetes 滚动更新几乎无感。早高峰期间扩容三台实例,两分钟内全部就位。运维说比之前 Java 服务动辄三五分钟热启动强太多。
当然,Swift 做企业后端也不是万能。生态确实不如 Python 或 Java 丰富,某些中间件得自己封装。但如果你团队已经有 Swift 开发能力,或者想统一技术栈,它是能实实在在加快交付节奏的选择。