Blog ENI : Toute la veille numérique !
🎃 Jusqu'à -30% sur les livres en ligne, vidéos et e-formations.
Code : GHOST30.
Cliquez ici !
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici

Les requêtes réseau avec ktor

Utiliser ktor dans les projets

ktor est une bibliothèque tierce. Pour pouvoir l’utiliser dans un programme, il convient d’ajouter une dépendance tierce dans le fichier build.gradle.kts du projet IntelliJ IDEA. Quand on l’ouvre, ce fichier ressemble actuellement à ceci :

import org.jetbrains.kotlin.gradle.tasks.KotlinCompile 
 
plugins {  
   kotlin("jvm") version "1.4.10" 
   application  
}  
 
group = "me.rolan" 
version = "1.0-SNAPSHOT" 
 
repositories { 
   mavenCentral() 
}  
 
dependencies {  
   testImplementation(kotlin("test-junit")) 
}  
 
tasks.withType<KotlinCompile>() { 
   kotlinOptions.jvmTarget = "1.8" 
}  
 
application {  
   mainClassName = "MainKt" 
} 

Il existe plusieurs versions de la bibliothèque ktor pouvant exploiter des clients HTTP différents afin de répondre au mieux aux besoins. Dans ce chapitre, nous utiliserons la version dite CIO (Coroutine-based I/O).

Dans la section dependencies, ajoutons la ligne suivante afin de pouvoir utiliser ktor en tant que dépendance tierce...

Qu’est-ce qu’une requête réseau ?

Nous allons limiter la définition d’une requête réseau à celle d’une requête HTTP, c’est-à-dire une requête web. Une requête web est tout simplement ce que fait un navigateur web (Google Chrome, Firebase, etc.) quand nous saisissons une URL dans l’espace dédié : il exécute une requête auprès d’un serveur afin d’afficher la page web demandée.

Dans le cas d’un logiciel, c’est exactement la même chose, sauf que le navigateur est remplacé par un client HTTP (dans ce cas, il s’agit de ktor). Il convient toujours d’interroger une URL particulière afin de demander des informations précises à un serveur. Bien souvent, dans le cas d’un logiciel, les informations renvoyées ne sont pas présentées sous la forme d’une page web classique, mais formatées afin d’être exploitées facilement par le programme. Les formats les plus populaires étant JSON, Protobuf ou encore XML.

Quand le serveur renvoie les données dans un format autre que celui d’une page web classique, on appelle cela un web service ou encore une API. Dans le cas d’une API, tout est paramétré pour que la requête que l’on fait au serveur puisse être personnalisée...

Des solutions alternatives

La bibliothèque ktor n’est pas la seule alternative pour consommer une API REST en Kotlin. Il existe de nombreuses solutions éprouvées, dont les capacités sont équivalentes. Citons quelques-unes d’entre elles :

  • OkHttp, développée et maintenue par la société Square

  • Volley, développée et maintenue par Google

  • HttpAsyncClient, développée et maintenue par la fondation Apache

Bien qu’initialement conçues pour Java, toutes ces bibliothèques fonctionnent sans problème avec Kotlin. Aucune de ces bibliothèques n’est meilleure que l’autre. Il convient de les tester pour se faire son propre avis.

Faire une requête réseau

1. Présentation de l’API

Nous allons consommer une API REST afin de mettre en place des requêtes réseau avec le client HTTP ktor.

Nous n’allons pas développer notre propre API bien que ktor le permette très facilement. Nous utiliserons plutôt une API gratuite qui renvoie des données aléatoires au format JSON. Cette API se nomme JSONPlaceholder et est disponible à l’adresse suivante : https://jsonplaceholder.typicode.com/

Cette API renvoie un objet (ou un tableau d’objets) JSON dont la structure est la suivante :

{ 
  "userId": 1, 
  "id": 1, 
  "title": "sunt aut facere repellat provident occaecati excepturi 
optio reprehenderit", 
  "body": "quia et suscipit suscipit recusandae consequuntur 
expedita et cum reprehenderit molestiae ut ut quas totam nostrum 
rerum est autem sunt rem eveniet architecto" 
} 

Nous n’allons pas utiliser toutes les routes et les verbes HTTP de l’API. Nous nous limiterons à deux exemples : la récupération d’un objet spécifique et la création d’un objet.

Pour récupérer un objet spécifique, il convient d’appeler l’URL https://jsonplaceholder.typicode.com/posts/1 avec le verbe HTTP GET, tandis que pour créer un objet via l’API, il convient d’appeler l’URL...

En résumé

  • Dans un programme informatique, il n’est pas rare d’avoir besoin d’échanger des informations avec un serveur via des requêtes réseau.

  • Pour faire une requête réseau, il est nécessaire d’utiliser ce que l’on appelle un client HTTP.

  • La bibliothèque ktor est un client HTTP qui permet de faire facilement des requêtes web tout en proposant de nombreuses options de paramétrage.