1

Rust と Rocket を使用して単純な REST API を構築しています。エンドポイントの 1 つは POST メソッド要求を受け入れ、要求本文から大きな文字列を読み取ります。ロケットでこれを行う方法がわかりません。

このドキュメントでは、POST リクエストの本文から JSON オブジェクトを読み取る方法と、生の文字列ではなくマルチパート フォーム データを読み取る方法について説明しています。誰もこれを行う方法を知っていますか?


アップデート:

以下の Dave の回答のアドバイスに従って、FromDataSimple トレイトを実装して、リクエスト本文を解析しようとしました。これは私が実装したものですが、「404 Not Found」という応答しか得られませんでした。

struct Store {
    contents: String,
}

impl FromDataSimple for Store {
    type Error = String;

    fn from_data(req: &Request, data: Data) -> data::Outcome<Self, String> {
        let mut contents = String::new();

        if let Err(e) = data.open().take(256).read_to_string(&mut contents) {
            return Failure((Status::InternalServerError, format!("{:?}", e)));
        }

        Success(Store { contents })
    }
}

#[post("/process", format = "application/json", data = "<input>")]
fn process_store(input: Store) -> &'static str {
    "200 Okey Dokey"
}

残念ながら、これを実行してから次の要求で ping を実行すると、404 Not Found 応答が返されます :-(

curl -X POST -H "Content-Type: application/json" --data "{ \"contents\": \"testytest\"}"  http://localhost:8080/process

更新 2:

実際、これは機能します。メソッドをルーティング ハンドラにマウントするのを忘れただけです。

fn main() {
    rocket::ignite().mount("/", routes![index, process_store]).launch();
}
4

1 に答える 1