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
}