9 releases (1 stable)

Uses new Rust 2024

new 1.0.0 Apr 27, 2025
0.5.0 Apr 21, 2025
0.4.0 Apr 19, 2025
0.3.0 Apr 18, 2025
0.1.0 Mar 31, 2025

#213 in HTTP server

Download history 113/week @ 2025-03-31 8/week @ 2025-04-07 392/week @ 2025-04-14 132/week @ 2025-04-21

652 downloads per month

MIT/Apache

38KB
752 lines

COA - webserver

Valentin Dassonville (valentin.dassonville2.etu@univ-lille.fr)

Toutes les features requises ont été développé mais la partie "additionnel" n'a pas pu être abordé par manque de temps.

Développement - Déploiement

Le projet fournit une Library crate ainsi qu'une Binary crate utilisant la Library crate.

Le développement du projet a été réalisé en créant les modules un par un. Chaque module a été testé et documenté afin de sortir une release à chaque fois. Le détail et la progression des releases est disponible dans le fichier CHANGELOG.md.

La branche main est la branche principale et contient le code de la dernière release.
La seconde branche est la branche develop qui est la branche où l'on merge les features avant de créer une release sur main. Un push sur main lance un déploiement de la CI/CD qui permet de créer une release automatiquement sur Crates.io.

La documentation de la crate est généré sur Gitlab Pages ici : https://gitlabpages.univ-lille.fr/valentin.dassonville2.etu/coa-webserver/coa_website

Library crate

La Library crate est séparé en plusieurs modules :

  • http : contient les versions, méthodes et codes HTTP
  • config : contient la configuration du serveur web
  • logger : gère les logs des requêtes
  • request : parser de requête
  • response : builder pattern pour les réponses
  • stats : statistiques du serveur web
  • router : routeur des fichiers statiques et de la route dynamique "/stats"
  • server : serveur http asynchrone permettant de gérer les requêtes entrante

Points intéressantes

  • Tout est async avec tokio permettant de gérer beaucoup de requêtes en même temps
  • Distinction claire des features dans des modules séparés
  • Pattern Builder dans le module response
  • Sérialization avec serde
  • Utilisation constante des Option et Result de Rust
  • Etat de base d'un serveur à l'aide du trait Default

Tests

Chaque module contient ses tests unitaires et des tests d'intégration sont disponible dans /tests/integration_server.rs.

Les tests peuvent être lancés en faisant cargo test.

Binary crate

Une Binary crate a été créée pour montrer comment utiliser la lib crate. Il faut lancer la méthode start d'un Server dans un runtime async. Ici tokio a été utilisé.

use coa_website::server::Server;

#[tokio::main]
async fn main() -> std::io::Result<()> {
    Server::with_address_and_config("127.0.0.1:8080", "config.toml").unwrap().start().await?;

    Ok(())
}

Elle utilise le fichier de configuration config.toml et sert les fichiers se trouvant le dossier public.

Dependencies

~7–17MB
~250K SLoC