└── API /API: -------------------------------------------------------------------------------- 1 | 2 | **Code** (`src/main.rs`): 3 | ```rust 4 | use actix_web::{web, App, HttpServer, Responder, HttpResponse}; 5 | use serde::{Deserialize, Serialize}; 6 | use std::sync::Mutex; 7 | 8 | #[derive(Serialize, Deserialize)] 9 | struct Item { 10 | id: u32, 11 | name: String, 12 | } 13 | 14 | struct AppState { 15 | items: Mutex>, 16 | } 17 | 18 | async fn get_items(data: web::Data) -> impl Responder { 19 | let items = data.items.lock().unwrap(); 20 | HttpResponse::Ok().json(&*items) 21 | } 22 | 23 | async fn create_item(data: web::Data, item: web::Json) -> impl Responder { 24 | let mut items = data.items.lock().unwrap(); 25 | items.push(item.into_inner()); 26 | HttpResponse::Created().finish() 27 | } 28 | 29 | #[actix_web::main] 30 | async fn main() -> std::io::Result<()> { 31 | let state = web::Data::new(AppState { 32 | items: Mutex::new(Vec::new()), 33 | }); 34 | 35 | HttpServer::new(move || { 36 | App::new() 37 | .app_data(state.clone()) 38 | .route("/items", web::get().to(get_items)) 39 | .route("/items", web::post().to(create_item)) 40 | }) 41 | .bind("127.0.0.1:8080")? 42 | .run() 43 | .await 44 | } 45 | --------------------------------------------------------------------------------