Trong tutorial cho người mới này, bạn sẽ học cơ bản về dùng SwiftUI để gọi API với Internet Chuck Norris DataBase (ICNDB) phổ biến làm ví dụ. Nó sẽ hiển thị một câu chuyện cười nhanh chóng và dễ dàng dùng Swift và SwiftUI.
Bạn sẽ thấy framework cross-platform SwiftUI cho phép dùng chính xác cùng code trên iOS, iPadOS, macOS, watchOS, App Clips và tvOS, điều mà trước đây không thể.
Cùng với đó, bạn sẽ dùng async-await giới thiệu trong Swift 5.5, hoạt động trên OS mới hơn bao gồm iPhone chạy iOS > v15.0. Điều này thực sự đơn giản hóa việc gọi network data bất đồng bộ khi nhấn button mà không freeze UI thread.
Tôi sẽ chia sẻ thay đổi code bạn cần làm trước. Sau đó, trong phần tiếp theo, tôi sẽ chia sẻ phân tích ngắn gọn về code để người mới hiểu chuyện gì đang xảy ra.

Cách Gọi API Trong Swift Và SwiftUI
Trước tiên, bạn cần Mac để cài Xcode. Sau khi cài, mở Xcode và tạo project mới. Chọn "App" cho iOS, macOS, tvOS, hoặc watchOS.
ContentView
Chỉ cần update file ContentView SwiftUI hiện có để thêm Button và dùng biến State để refresh text hiển thị khi joke trả về từ ICNDB API:
import Foundation import SwiftUI struct ContentView: View { @State private var joke: String = "" var body: some View { Text(joke) Button { Task { let (data, _) = try await URLSession.shared.data(from: URL(string:"https://api.chucknorris.io/jokes/random")!) let decodedResponse = try? JSONDecoder().decode(Joke.self, from: data) joke = decodedResponse?.value ?? "" } } label: { Text("Fetch Joke") } } } struct ContentView_Previews: PreviewProvider { static var previews: some View { ContentView() } } struct Joke: Codable { let value: String }Lấy một joke!
Nếu bạn press build/play, app sẽ build trên platform bạn chọn ở trên:

Phân Tích Code
Nếu bạn vào random joke URL, bạn sẽ thấy data ở format JSON. Bạn có thể copy đó và dùng JSON Linter để xem cấu trúc để biết property nào của object Joke cần thiết.
Dựa trên đó, bạn xác định code trên. Bạn dùng protocol Codable (aka interfaces) để chuyển từ JSON data object sang Swift class hoặc struct thực tế, và tạo properties cho data bạn muốn lưu (value trong trường hợp này).
JSONDecoder giúp parse JSON string dùng Codable object. Điều này hoạt động bất kể platform vì trang load khi launch app có cùng tên ContentView bất kể platform.
App Clips
App Clips là cách mới nhất của Apple dùng native app functionality dùng "App Clip Code" không cần tải toàn bộ app từ App Store.
App Clips hoạt động giống iOS app – khác biệt duy nhất là bạn không tạo project App Clip mới. Bạn chỉ cần thêm App Clip làm target vào iOS app hiện có bằng File->New->Target->iOS->App Clip khi iOS app hiện có mở trong Xcode.
Nếu bạn thắc mắc về iPhone/iPad Widgets, chúng không animate. Vậy button click chỉ mở app tương ứng và không thể update text qua external API độc lập.
Kết Luận
Trong bài này, bạn học cách gọi RESTful GET API từ SwiftUI theo cách đơn giản nhất!
Tự do liên hệ tôi nếu có câu hỏi. Tôi tìm ra điều này qua bài viết khác và nghĩ đơn giản hóa thêm. Vì vậy để biết chi tiết và cách làm code phức tạp hơn, xem bài đó:
async/await in SwiftUIConvert a SwiftUI app to use the new Swift concurrency and find out what's going on beneath the shiny surface.
Audrey Tamraywenderlich.com