Le Vide Tête

Tout ce qu'est trop long pour tenir dans un tweet

Swift côté serveur: Appeler une API Rest

Un petit tutoriel pour te montrer comment utiliser Swift côté serveur avec le framework Vapor pour faire des requêtes vers un autre service REST.
N’essaye pas de le faire de la manière classique en utilisant URLSessions, ca ne marchera que sur Mac car sur Linux ce n’est pas encore implémenté. Mais heureusement les créateurs de Vapor ont pris ça en charge et ont rendu cela très facile.

Requis

Il faut avoir installé Swift et Vapor toolkit. Si ce n’est pas encore fait, regarde mon tutoriel.

Créer un nouveau projet

Builder le projet

Créer un projet Xcode

Si tu es sur Mac et tu veux utiliser Xcode

et ouvre-le.

Sinon, utilise ton éditeur préféré pour ouvrir le dossier apigetdemo.

Créer une nouvelle route

Ouvrir le fichier main.swift du dossier Sources/App, supprimer la route post et créer une nouvelle route temperature

Builder & executer

Pour tester la nouvelle route:

puis depuis un navigateur aller à l’url: http://localhost:8080/temperature
En retour tu devrais avoir: La temperature à Montpellier est : <todo> °C

Préparation à l’appel d’une API

Pour cela, je vais utiliser un service exposé par openweathermap.org.
Tu dois t’enregistrer et récupérer ta propre clé API (APPID) pour faire les appels vers cette API.

L’appel GET que nous allons faire sera:
http://api.openweathermap.org/data/2.5/weather?q=Montpellier,FR&units=metric&APPID=<apppid>
(remplacer <appid> avec ton propre id)
et en retour on reçoit un JSON comme:

Tu peux aussi utiliser une API libre comme celle de jsonplaceholder: https://jsonplaceholder.typicode.com/todos/4
qui retourne:

Faire l’appel à l’API

Pour cela on va utiliser Droplet.client fournit par Vapor pour faire les requêtes vers les serveurs distants. Pour cet exemple on va juste faire un simple GET, mais regarde la documentation pour des requêtes plus complexes qui sont également possibles.

Modifier la route temperature de main.swift pour resembler à:

Dans la console il y aura la réponse et le corps de la réponse comme JSON:

Récupérer la température depuis le résultat

En regardant le JSON de la réponse on voir que pour avoir la temperature il nous faut juste temp qui se trouve dans main.

Donc on récupère la temperature en utilisant:

Résultat final

Extra

Un exemple sur comment gérer le résultat d’un appel qui est une liste d’éléments.

Pour cela on va récupérer la liste des choses à faire proposée par ce service:
https://jsonplaceholder.typicode.com/todos/

On veut juste garder la liste des titles de cette réponse:

Voilà, c’est aussi simple que ça, grâce à Vapor.