Router les requêtes
Définir les méthodes retournant une réponse
Dans reviews.rs
use std::collections::HashMap;
use actix_web::{error, AsyncResponder, HttpResponse, Json, Path, State};
use futures::Future;
use futures;
Définir comment extraire le product_id du path
#[derive(Deserialize)]
pub struct ProductId {
product_id: i32,
}
GET des reviews
pub fn reviews(
product_id: Path<ProductId>,
state: State<super::AppState>,
) -> Box<Future<Item = HttpResponse, Error = error::Error>> {
let product_id = product_id.product_id;
unimplemented!()
}
POST d'une review
#[derive(Debug, Deserialize, Serialize)]
pub struct NewReview {}
pub fn create_review(
product_id: Path<ProductId>,
review: Json<NewReview>,
state: State<super::AppState>,
) -> Box<Future<Item = HttpResponse, Error = error::Error>> {
let product_id = product_id.product_id;
unimplemented!()
}
Définir les routes
Dans lib.rs
use actix_web::http;
mod reviews;
server::new(move || {
App::with_state(AppState {
}).middleware(Logger::default())
.resource("/reviews/{product_id}", |r| {
r.method(http::Method::GET).with2(reviews::reviews);
r.method(http::Method::POST).with3(reviews::create_review);
})
}).bind(addr)
.unwrap()
.start();
Résultat
Les routes définies ne répondent pas, et un log apparaît quand on les appelle
curl localhost:9080/reviews/0 -i
curl: (52) Empty reply from server
thread 'arbiter:"85373381-235b-47af-bde8-4d85e5b778d8":"actor"' panicked at 'not yet implemented', src/reviews.rs:18:5