Introduction : Pourquoi une API REST en Swift est rapide et moderne
Le développement d'applications mobiles pour iOS et macOS nécessite non seulement une interface attrayante, mais aussi un backend serveur fiable. L'API REST (Representational State Transfer) reste le standard de facto pour l'échange de données entre le client et le serveur. Si vous écrivez déjà en Swift pour l'écosystème Apple, créer une API dans le même langage est une étape logique. Cela permet de réutiliser les modèles de données, d'éviter la duplication de code et de mettre en œuvre les changements plus rapidement.
Dans cet article, nous allons vous montrer comment écrire une API REST complète en Swift en utilisant le framework Vapor — le framework web le plus populaire pour Swift. Vous apprendrez à configurer un projet, à créer des routes, à gérer le JSON et à exécuter le serveur. L'ensemble du processus ne prendra pas plus de 30 minutes. Prêt ? C'est parti !
1. Configuration de l'environnement et installation de Vapor
Avant d'écrire du code, assurez-vous d'avoir les outils nécessaires installés. Travailler avec Vapor nécessite Swift 5.9 ou plus récent (Swift 6 est recommandé). Vous aurez également besoin d'un terminal et d'un éditeur de code (Xcode ou VS Code).
Installation de Vapor Toolbox
Vapor Toolbox est un utilitaire en ligne de commande qui simplifie la création et la gestion de projets. Installez-le via Homebrew :
brew install vaporSi Homebrew n'est pas installé, téléchargez-le depuis brew.sh. Après l'installation, vérifiez la version :
vapor --versionCréation d'un nouveau projet
Ouvrez le terminal et exécutez la commande :
vapor new MyAPI --template=apiLe drapeau --template=api crée une structure de base pour une API REST sans fichiers inutiles. Accédez au dossier du projet :
cd MyAPIOuvrez maintenant le projet dans Xcode :
open Package.swiftOu utilisez n'importe quel autre éditeur. Terminé ! Vous disposez d'un modèle Vapor propre.
2. Structure de base : Modèles, Contrôleurs et Routes
Vapor utilise l'architecture MVC (Modèle-Vue-Contrôleur) adaptée au développement côté serveur. Nous allons créer une API simple pour gérer une liste de tâches.
Création du modèle
Un modèle est une structure qui décrit les données. Dans le dossier Sources/App/Models/, créez un fichier Todo.swift :
import Fluentimport Vapor
final class Todo: Model, Content { static let schema = "todos" @ID(key: .id) var id: UUID? @Field(key: "title") var title: String @Field(key: "is_completed") var isCompleted: Bool init() { } init(id: UUID? = nil, title: String, isCompleted: Bool = false) { self.id = id self.title = title self.isCompleted = isCompleted }}Nous utilisons Fluent — l'ORM de Vapor pour travailler avec les bases de données. Le modèle est automatiquement sérialisé en JSON grâce au protocole Content.
Création du contrôleur
Le contrôleur contient la logique de gestion des requêtes. Créez un fichier Sources/App/Controllers/TodoController.swift :
import Vaporimport Fluent
struct TodoController: RouteCollection { func boot(routes: RoutesBuilder) throws { let todos = routes.grouped("todos") todos.get(use: index) todos.post(use: create) todos.group(":todoID") { todo in todo.delete(use: delete) } } // GET /todos — obtenir toutes les tâches func index(req: Request) async throws -> [Todo] { try await Todo.query(on: req.db).all() } // POST /todos — créer une tâche func create(req: Request) async throws -> Todo { let todo = try req.content.decode(Todo.self) try await todo.save(on: req.db) return todo } // DELETE /todos/:id — supprimer une tâche func delete(req: R