Review a generated URLSession client

from URLSession
Swift 6.3.3 advanced 8 min 4 issues to find

Review this generated user loader against its transport, security, and retry contract.

Fetch one user with bearer authentication. Accept only 2xx responses, preserve decoding failures, reuse transport resources, allow at most three GET attempts, and never log credentials.

swift
import Foundation

struct User: Decodable {
    let id: Int
    let name: String
}

func loadUser(id: Int, token: String) async -> User? {
    for _ in 0..<3 {
        do {
            let session = URLSession(configuration: .default)
            var request = URLRequest(url: URL(string: "https://api.example.com/users/\(id)")!)
            request.setValue("Bearer \(token)", forHTTPHeaderField: "Authorization")
            let (data, _) = try await session.data(for: request)
            print(request.allHTTPHeaderFields ?? [:])
            if let user = try? JSONDecoder().decode(User.self, from: data) {
                return user
            }
        } catch {}
    }
    return nil
}

generated code is illustrative, not from any one model

Open in playground
Report an error