Tutoriel Swift : Alamofire GET

infokayak

Aujourd’hui, je vous propose de commencer à défricher un gros morceau : l’utilisation des API’s REST en SWIFT !

Prérequis :

– un compte chez Darksky.net (gratuit), pour pouvoir générer votre propre clé afin d’utiliser l’API météo.

– quelques bases en développement Swift 🙂

Définitions :

Tout d’abord, quelques définitions afin que nous parlions la même langue…

API : « Application Programming Interface », Une API est une interface de programmation qui permet de se « brancher » sur une application pour échanger des données. Une API est ouverte et proposée par le propriétaire du programme.

REST : « Representational State Transfert » est un style d’architecture définissant un ensemble de contraintes basées sur le protocole HTTP. Les services web REST, appelés services RESTful, permettent aux systèmes d’accéder à des ressources web et de réaliser des requêtes. Ces services sont consommés grâce à des méthodes HTTP standards : GET, POST, PUT, DELETE… Les données renvoyées peuvent êtres sous différents formats, dont, celui qui nous intéresse dans ce tuto, le format JSON. Plus d’infos ici : https://fr.wikipedia.org/wiki/Representational_state_transfer

HTTP : « Hypertext Transfer Protocol », protocole client-serveur à la base du web tel que nous le connaissons actuellement. Sa variante sécurisée est https. ex : https://vincent.barousse.wordpress.com.

GET : récupère des données, comme une page web, sans altérer le contenu du serveur.

HEAD : comme GET, mais envoie seulement des en-têtes (headers), et non les données.

POST : envoie des données au serveur, par exemple lorsque l’on clique sur « Envoyer » dans un formulaire.

PUT : Envoie des données à un emplacement spécifique.

DELETE : Efface des données à un emplacement spécifique.

JSON : « Javascript Object Notation », c’est un mécanisme simple, portable et lisible par l’homme pour transférer des données entre 2 systèmes. JSON a un nombre limité de types de données: chaîne, booléen, tableau, objet / dictionnaire, nul et nombre. Il n’y a pas de distinction entre les nombres entiers et les nombres décimaux.

Bon, et maintenant, revenons à nos moutons 🙂

Pour faire simple, SWIFT comporte en natif la possibilité de traiter du HTTP, du JSON et du REST, mais c’est long et compliqué. Donc, il existe plusieurs frameworks pour nous simplifier la vie, dont Alamofire.

Pour illustrer ce premier article consacré à l’usage d’API’s REST en Swift, je vous propose une petite application qui récupère le niveau de la Loire, la température et la météo à Digoin (Digouin)

Cette application illustre un manière d’utiliser Alamofire pour des requêtes GET.

Vous pouvez retrouver l’application d’exemple sur gitLab ici : https://gitlab.com/vinceBar/InfoKayakDemo

Donc, la première chose à faire pour utiliser Alamofire, c’est de l’intégrer à votre projet Xcode. Personnellement, j’utilise pour cela Cocoapods. Voici donc le fichier Pod :

pod-infokayak

Ensuite, on pense à bien ouvrir le fichier .xcworspace avec Xcode 🙂

Pour récupérer les données de niveau j’utilise l’API d’OpenDataSoft : https://public.opendatasoft.com/

Cette API ne nécessite pas d’authentification (clé).

Les données renvoyées en JSON se présentent comme cela : Données Loire à Digoin

La donnée qui nous intéresse principalement est la hauteur, mais, pour usage futur, je récupère également le débit et l’identité de la station de mesure.

J’ai donc créé une classe qui s’occupe de stocker les données récupérées pour la forme d’un Dictionary: [String : Any]. Il s’agit de la classe « CurrentRiver » :

InfoKayakCurrentRiverClass

Ensuite, je prépare la requête à l’API. C’est là que Alamofire rentre en jeu. Voici la classe « ForecastRiverService » :

InfoKayakForecastRiverServiceClass

Dans le principe, on commence par forger l’URL de base du site sur lequel nous allons faire la requête :

let riverBaseURL = URL(string: « https://public.opendatasoft.com/api/records/1.0/search/ « )

Ensuite, la fonction « getCurrentRiver » récupère en paramètre la question à envoyer à l’API :

func getCurrentRiver(currentSearch: String, completion: @escaping (CurrentRiver?) -> Void) {

}

On forge l’URL complète :

if let riverURL = URL(string: « \(riverBaseURL!)\(currentSearch) ») {

}

Et on la soumet à Alamofire en précisant que la réponse est en JSON :

 Alamofire.request(riverURL).responseJSON(completionHandler: { (response) in

Si la réponse est ok, on la traite, cela consiste principalement à naviguer à l’intérieur de dictionaries :

InfoKayakTraitementJSON

et enfin, on gère les éventuelles erreurs :

InfoKayakTraitementErreurs

Voilà, le plus dur est fait !

Il n’y a plus qu’à utiliser tout cela dans notre ViewController :

InfoKayakViewDidLoad

et la fonction loadRiverDatas :

InfoKayakLoadRiverDatasFunc

Et c’est fini pour la gestion du niveau de la Loire !

Pour la récupération des données météo, c’est la même chose. Seule diffère l’utilisation d’une clé d’API. Je vous laisse étudier tout cela dans le code source : InfoKayak Demo

Comme d’habitude, n’hésitez pas à commenter ou à m’envoyer un mail si vous aves des questions, commentaires…

Une réflexion sur “Tutoriel Swift : Alamofire GET

  1. Pingback: Alamofire POST Tutoriel | Pour quelques lignes de plus...

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion /  Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion /  Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s