Vapor 4 fait progresser Swift sur les serveurs

Florent Morin |

Après plusieurs mois de développement, la version 4 du framework web open source Vapor se déploie progressivement en version finale. Une version attendue dans la communauté Swift pour un outil qui gagne en maturité.

Qu’est-ce que Vapor ?

Un framework est un ensemble d’outils destiné à faciliter le travail des développeurs. Vapor est un framework web : il permet de concevoir une application de serveur web. Il peut donc être utilisé pour concevoir un site web ou un service web.

Les services web sont utilisés afin d’alimenter en données les apps, par exemple. Quand vous recevez un message dans votre app de réseau social, c’est parce qu’un service web a pris en charge l’échange d’informations.

Certains frameworks web sont très connus : Ruby on Rails (langage Ruby), Express (langage Javascript), Symfony (langage PHP)… La particularité de Vapor est d'être écrit en Swift. Il est donc compatible avec les serveurs GNU/Linux (qui sont les plus utilisés) et macOS (surtout pour le développement). Et, pour les plus bricoleurs, il fonctionne également sur Raspberry Pi.

Vapor, le futur du développement web ?

Les nouveautés de Vapor 4

Vapor est encore très jeune. Il lui manque la richesse de composants de ses concurrents dans d’autres langages. Mais il a déjà commencé à faire son nid, notamment chez Allegro, ING ou bien AWS pour sa dimension service web. La version 4 apporte de nombreuses nouveautés. Voici les principales.

Utilisation optimale du langage

En premier lieu, Vapor 4 a su profiter des avancées de Swift. Swift 5.1 a apporté entre autres les property wrappers, qui permettent de simplifier la lecture du code. Swift 5.2 a amélioré les performances tout en apportant certaines évolutions particulièrement pratiques. Au point d’en faire un pré-requis pour Vapor 4.

Des configurations en Swift

Certaines configurations étaient encore enregistrées au format JSON. Elles sont maintenant enregistrées en Swift pour plus de commodité et parce que les évolutions du langage le permettent.

Conformité Swift Server Work Group (SSWG)

Un groupe de travail spécifique aux serveurs a été mis en place au sein de la communauté Swift. En gros, il met en place des recommandations pour les différents outils Swift côté serveur de sorte à les uniformiser.

Vapor a donc rejoint Apple au sein de ce groupe et a mis en application les recommandations pour Vapor 4. Certains de ses composants ont été validés, d’autres le seront probablement ultérieurement.

SwiftNIO 2.0

SwiftNIO est une solution open source proposée par Apple sur laquelle s’appuie Vapor. Elle permet d’offrir une solution performante de communication entre client et serveur, spécialement optimisée pour le langage Swift. Il s’agit du socle technique de la partie serveur.

La version 2.0 a apporté, entre autres :

  • un support optimal des différentes versions de Swift 5
  • de meilleures performances
  • l’intégration de BoringSSL qui permet de couper les ponts avec OpenSSL afin de gérer les connexions TLS (utilisées pour le HTTPS)
  • l’implémentation du protocole HTTP/2 en Swift, sans autre dépendance.

Par conséquent, Vapor 4 support HTTP/2 et TLS sans composant externe. Et personne ne s’en plaindra !

SwiftCrypto + CryptoKit

Afin de protéger les données, il faut utiliser des méthodes de chiffrement. Vapor utilise maintenant CryptoKit fourni par Apple sur macOS et SwiftCrypto, sa déclinaison open-source pour GNU/Linux. Que du bonheur !

Fluent

Fluent est un ORM pour Vapor. Pour faire simple, il permet de transformer le code complexe pour accéder aux données des bases de données en code plus simple à comprendre.

Plus précisément, il permet de transformer les requêtes et les données des différents gestionnaires de base de données (MySQL, PostgreSQL) en objets exploitables directement dans le code. L’objectif est de simplifier autant que possible l’accès aux données.

Parmi les améliorations majeures, les données peuvent être partiellement récupérées ou écrites, afin de limiter les requêtes aux bases de données, tout en améliorant les performances. Dans le même ordre d’idées, les données peuvent être récupérées à la demande plutôt que d’être pré-chargées, ce qui évite les requêtes inutiles.

Leaf

Leaf est un langage de templates (de « patrons », comme en couture) qui permet de transformer du code Swift en code HTML ou JSON exploité par le navigateur web ou le service web. Par exemple, si vous souhaitez afficher une liste de produits sur une page web, vous devrez transformer les informations de base de données en code HTML.

C’est là que Leaf permet de faire la passerelle et génère ce code directement depuis le serveur, avec une syntaxe spécifique. Dans Vapor 4, la syntaxe a tout simplement été améliorée.

XCTVapor pour les tests automatisés

Lorsque l’on code un service web, il est toujours utile de faire des tests automatisés afin de s’assurer que rien n’est cassé. Quand on code en Swift, on utilise XCTest, l’outil de test intégré à Xcode et disponible en version open source pour GNU/Linux. XCTVapor apporte des outils de test spécifiques à Vapor. Ce qui permet de tester tout en gardant ses repères.

APNS pour les notifications push

Les développeurs iOS sont familiers d’APNS : il s’agit de la plateforme de notifications push proposée par Apple. Vapor 4 propose un composant APNS permettant de simplifier l’envoi de notifications push depuis un serveur. Lui-même s’appuie sur APNSwift, un composant open source totalement intégré à l’environnement Vapor / Apple.

JWT pour l’authentification

Vapor propose à ceux qui le souhaitent un composant JWT qui permet de gérer des jetons JWT. Les jetons JWT permettent de vérifier l’authentification d’un utilisateur à chaque requête. Le format JWT est un des formats les plus populaires.

Le composant JWT s’appuie sur un autre composant de Vapor, JWTKit. Celui-ci est utilisé pour générer et vérifier les jetons. Le composant JWT permet une intégration simplifiée à Vapor.

Queues (ex. Jobs)

Sûrement pour éviter la confusion avec Steve, le composant a été renommé Queues. Ce composant permet d’effectuer des tâches en différé, comme par exemple l’envoi d’emails.

Des images Docker clés en main

Docker permet d’exécuter un environnement serveur dans un conteneur cloisonné. C’est un outil particulièrement populaire auprès des développeurs. L’idée est de transporter des serveurs sous forme de fichiers, que l’on appelle des images. Tout y est prêt, du moment que l’on a une installation opérationnelle de Docker sur son poste. Vapor s’est donc appuyé sur des images Swift de Docker afin de générer ses propres images Docker adaptées à Vapor.

Et plein d’autres choses à découvrir

De nombreuses autres améliorations sont disponibles. N’hésitez pas à tester Vapor pour les découvrir, ne serait-ce que par curiosité.

Un avenir radieux

En quelques années, Vapor est devenu leader sur le marché des serveurs Swift. Avec l’arrivée de Swift 5.3 sur Windows et Swift 6 qui se veut encore plus multiplateforme, Vapor devrait encore gagner en importance.

avatar Ali Baba | 

« Sûrement pour éviter la confusion avec Steve, le composant a été renommé Queues »

Ah bah maintenant on va confondre avec Benjamin Griveaux.

#jesors

avatar Link1993 | 

@Ali Baba

Je lis Jean Jacques Grimault à chaque fois que je lis Griveaux...

avatar mbritto | 

Je confirme : je teste cette version 4 depuis le mois de janvier et elle est vraiment géniale!

avatar Lightman | 

@mbritto

Maxime : je ne sais pas si tu prévoies de faire un sujet là-dessus, mais je suis très intéressé.
Pour me lancer plus sérieusement dans le dév je bloque sur ces questions de communication serveur.
Je suis nul au point de ne pas arriver à établir un dialogue entre une app et une bdd. Et donc je me pose la question de reprendre de 0 en Swift.

CONNEXION UTILISATEUR