Comment écrire une API REST en Swift en 30 minutes : pour débutants
Swift n'est pas seulement un langage pour créer des applications mobiles sous iOS et macOS. Avec l'apparition du framework Vapor, le développement d'applications serveur en Swift est devenu accessible et pratique. Dans cet article, nous allons montrer comment écrire une API REST simple en Swift en seulement 30 minutes. Vous découvrirez les principes de base du travail avec Vapor, apprendrez à créer des routes, à traiter les requêtes et à renvoyer des réponses JSON.
Ce guide est parfait pour les débutants qui connaissent déjà les bases de Swift, mais qui n'ont jamais écrit de code serveur. Nous allons décomposer le processus étape par étape, avec des exemples de code et des explications.
Qu'est-ce qu'une API REST et pourquoi en a-t-on besoin ?
REST (Representational State Transfer) est un style architectural d'interaction entre les composants d'une application distribuée sur un réseau. Une API REST permet aux applications clientes (par exemple, une application iOS) de recevoir et d'envoyer des données au serveur via des requêtes HTTP.
Les principales méthodes HTTP utilisées dans REST :
- GET — récupération de données
- POST — création d'une nouvelle ressource
- PUT — mise à jour d'une ressource existante
- DELETE — suppression d'une ressource
Pour notre exemple, nous allons créer une API simple pour gérer une liste de tâches (Todo List). Elle prendra en charge les quatre opérations CRUD de base (Create, Read, Update, Delete).
Installation de Vapor et création du projet
Vapor est le framework web le plus populaire pour Swift. Pour commencer, installez Vapor Toolbox via Homebrew :
brew install vaporAprès l'installation, créez un nouveau projet :
vapor new TodoAPIcd TodoAPICette commande créera une structure de projet avec un serveur déjà configuré. Ouvrez le projet dans Xcode :
open Package.swiftDans Xcode, vous verrez la structure standard d'un projet Vapor. Le code principal se trouve dans le dossier Sources/App.
Création du modèle de données
Pour travailler avec les tâches, nous avons besoin d'un modèle. Créons un fichier Todo.swift dans le dossier Sources/App/Models :
import Vaporimport Fluent
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 pour Swift qui fonctionne avec les bases de données. Dans notre exemple, nous utiliserons SQLite pour simplifier. Notez le protocole Content — il permet d'encoder/décoder automatiquement le modèle en JSON.
Configuration de la migration et de la base de données
Créons maintenant une migration pour notre modèle. Ajoutez le fichier CreateTodo.swift dans le dossier Sources/App/Migrations :
import Fluent
struct CreateTodo: Migration { func prepare(on database: Database) -> EventLoopFuture<Void> { return database.schema("todos") .id() .field("title", .string, .required) .field("is_completed", .bool, .required) .create() } func revert(on database: Database) -> EventLoopFuture<Void> { return database.schema("todos").delete() }}Dans le fichier configure.swift, ajoutez l'enregistrement de la base de données et de la migration :
import Fluentimport FluentSQLiteDriver
public func configure(_ app: Application) throws { app.databases.use(.sqlite(.file("db.sqlite")), as: .sqlite) app.migrations.add(CreateTodo())