Article original : How to Make a Simple Async GET REST API call in SwiftUI

Par Saamer Mansoor

Dans ce tutoriel pour débutants, vous apprendrez les bases de l'utilisation de SwiftUI pour faire des appels d'API en utilisant la populaire base de données Internet Chuck Norris (ICNDB) comme exemple. Il affichera une blague rapidement et facilement en utilisant Swift et SwiftUI.

Vous verrez comment le framework multiplateforme SwiftUI nous permet d'utiliser exactement le même code sur iOS, iPadOS, macOS, watchOS, App Clips et tvOS, ce qui aurait été impossible autrement.

En plus de cela, vous utiliserez async-await qui a été introduit dans Swift 5.5, et qui fonctionne pour les systèmes d'exploitation plus récents, y compris les iPhones exécutant iOS > v15.0. Cela simplifie vraiment notre travail de réalisation d'appels réseau de données de manière asynchrone au clic d'un bouton sans bloquer le thread de l'interface utilisateur.

Je vais partager les modifications de code que vous devrez apporter en premier. Ensuite, dans la section suivante, je vais partager une brève analyse du code afin que les débutants puissent également comprendre ce qui se passe.

Image Application tvOS exécutant le code affichant un bouton qui récupère la blague au clic

Comment faire des appels d'API dans Swift et SwiftUI

Tout d'abord, vous aurez besoin d'un Mac pour installer Xcode. Une fois installé, ouvrez Xcode et créez un nouveau projet. Ensuite, sélectionnez "App" pour iOS, macOS, tvOS ou watchOS.

ContentView

Mettez simplement à jour votre fichier SwiftUI ContentView existant pour ajouter un bouton et utiliser la variable State pour actualiser le texte affiché lorsque la blague est retournée par l'API ICNDB :

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("Récupérer une blague")
        }
    }
}
struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}
struct Joke: Codable {
    let value: String
}

Récupérer une blague !

Si vous appuyez sur build/play, l'application se construira sur la plateforme que vous avez sélectionnée ci-dessus :

Image Captures d'écran des applications watchOS, macOS et iOS exécutant exactement le même code

Analyse du code

Si vous allez à l'URL de la blague aléatoire, vous remarquerez que les données sont au format JSON. Vous pouvez copier cela et utiliser un JSON Linter pour voir sa structure afin de déterminer quelle propriété de l'objet Joke est nécessaire.

Sur cette base, vous déterminez le code ci-dessus. Vous utilisez le protocole Codable (aka interfaces) pour passer d'un objet de données JSON à une classe ou une structure Swift réelle, et vous créez des propriétés pour les données que vous souhaitez stocker (value dans notre cas).

JSONDecoder nous aide à analyser la chaîne JSON en utilisant l'objet Codable. Cela fonctionne indépendamment de la plateforme car la page qui se charge au lancement de l'application a le même nom ContentView quelle que soit la plateforme.

App Clips

App Clips sont la dernière méthode d'Apple pour utiliser la fonctionnalité native d'une application à l'aide d'un "App Clip Code" sans avoir à télécharger l'application complète depuis l'App Store.

Les App Clips fonctionnent de manière similaire à une application iOS – la seule différence est que vous ne créez pas un nouveau projet App Clip. Vous devez simplement ajouter l'App Clip en tant que cible à une application iOS existante en allant dans Fichier->Nouveau->Cible->iOS->App Clip lorsqu'une application iOS existante est ouverte dans Xcode.

Si vous vous demandez à propos des Widgets iPhone/iPad, eh bien, ils ne s'animent pas. Ainsi, les clics sur les boutons ouvriront simplement l'application correspondante et ne pourront pas mettre à jour le texte via une API externe de manière indépendante.

Conclusion

Dans cet article, vous avez appris comment faire des appels d'API RESTful GET à partir de SwiftUI de la manière la plus simple possible !

N'hésitez pas à me contacter si vous avez des questions. J'ai compris cela en utilisant un autre article et j'ai pensé à le simplifier davantage. Donc, pour plus de détails et des moyens de rendre ce code plus complexe, consultez cet article :