Async URLSession JSON fetch
Swift
import Foundation
struct Repo: Decodable {
let name: String
let htmlURL: URL
enum CodingKeys: String, CodingKey {
case name
case htmlURL = "html_url"
}
}
func fetchRepos(user: String) async throws -> [Repo] {
var request = URLRequest(url: URL(string: "https://api.github.com/users/\(user)/repos")!)
request.setValue("bits-example", forHTTPHeaderField: "User-Agent")
request.timeoutInterval = 10
let (data, response) = try await URLSession.shared.data(for: request)
guard let http = response as? HTTPURLResponse, http.statusCode == 200 else {
throw URLError(.badServerResponse)
}
return try JSONDecoder().decode([Repo].self, from: data)
}