How to implement versioned API in Rust

Web
Implement versioned APIs in Rust by creating separate modules for each version and routing them to distinct URL paths like /api/v1 and /api/v2.

Implement versioned APIs in Rust by prefixing route paths with version numbers and using separate modules for each version's logic.

use actix_web::{web, App, HttpResponse, HttpServer, Responder};

mod v1 {
    use super::*;
    pub async fn get_user(id: web::Path<i32>) -> impl Responder {
        HttpResponse::Ok().body(format!("v1 user: {}", id.into_inner()))
    }
}

mod v2 {
    use super::*;
    pub async fn get_user(id: web::Path<i32>) -> impl Responder {
        HttpResponse::Ok().body(format!("v2 user: {}", id.into_inner()))
    }
}

#[actix_web::main]
async fn main() -> std::io::Result<()> {
    HttpServer::new(|| {
        App::new()
            .service(web::scope("/api/v1").route("/users/{id}", web::get().to(v1::get_user)))
            .service(web::scope("/api/v2").route("/users/{id}", web::get().to(v2::get_user)))
    })
    .bind("127.0.0.1:8080")?
    .run()
    .await
}