mirror of
https://github.com/actix/actix-extras.git
synced 2025-02-22 10:23:18 +01:00
Add request-id header example (#108)
* Add request-id header example * Apply cargo fmt
This commit is contained in:
parent
20a85b2a08
commit
f8b7ca2a5a
@ -1,5 +1,5 @@
|
||||
[workspace]
|
||||
members = [".", "examples/opentelemetry", "examples/custom-root-span"]
|
||||
members = [".", "examples/opentelemetry", "examples/custom-root-span", "examples/request-id-response-header"]
|
||||
|
||||
[package]
|
||||
name = "tracing-actix-web"
|
||||
|
10
examples/request-id-response-header/Cargo.toml
Normal file
10
examples/request-id-response-header/Cargo.toml
Normal file
@ -0,0 +1,10 @@
|
||||
[package]
|
||||
name = "request-id-response-header"
|
||||
version = "0.1.0"
|
||||
edition = "2021"
|
||||
|
||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
[dependencies]
|
||||
actix-web = "4"
|
||||
tracing-actix-web = { path = "../.." }
|
25
examples/request-id-response-header/README.md
Normal file
25
examples/request-id-response-header/README.md
Normal file
@ -0,0 +1,25 @@
|
||||
# Request ID in Response Header
|
||||
|
||||
This example shows how to set the `RequestId` as a response header.
|
||||
|
||||
## Running
|
||||
|
||||
You can launch this example with
|
||||
|
||||
```bash
|
||||
cargo run
|
||||
```
|
||||
|
||||
An `actix-web` application will be listening on port `8080`.
|
||||
You can fire requests to it with:
|
||||
|
||||
```bash
|
||||
curl -v http://localhost:8080/hello
|
||||
```
|
||||
```text
|
||||
...
|
||||
< HTTP/1.1 200 OK
|
||||
< content-length: 12
|
||||
< x-request-id: 1d5c5448-44d2-4051-ab59-985868875f94
|
||||
...
|
||||
```
|
41
examples/request-id-response-header/src/main.rs
Normal file
41
examples/request-id-response-header/src/main.rs
Normal file
@ -0,0 +1,41 @@
|
||||
use actix_web::{
|
||||
dev::Service,
|
||||
http::header::{HeaderName, HeaderValue},
|
||||
web, App, HttpMessage, HttpServer,
|
||||
};
|
||||
use std::io;
|
||||
use tracing_actix_web::{RequestId, TracingLogger};
|
||||
|
||||
async fn hello() -> &'static str {
|
||||
"Hello world!"
|
||||
}
|
||||
|
||||
#[actix_web::main]
|
||||
async fn main() -> io::Result<()> {
|
||||
HttpServer::new(move || {
|
||||
App::new()
|
||||
// set the request id in the `x-request-id` response header
|
||||
.wrap_fn(|req, srv| {
|
||||
let request_id = req.extensions().get::<RequestId>().copied();
|
||||
let res = srv.call(req);
|
||||
async move {
|
||||
let mut res = res.await?;
|
||||
if let Some(request_id) = request_id {
|
||||
res.headers_mut().insert(
|
||||
HeaderName::from_static("x-request-id"),
|
||||
// this unwrap never fails, since UUIDs are valid ASCII strings
|
||||
HeaderValue::from_str(&request_id.to_string()).unwrap(),
|
||||
);
|
||||
}
|
||||
Ok(res)
|
||||
}
|
||||
})
|
||||
.wrap(TracingLogger::default())
|
||||
.service(web::resource("/hello").to(hello))
|
||||
})
|
||||
.bind("127.0.0.1:8080")?
|
||||
.run()
|
||||
.await?;
|
||||
|
||||
Ok(())
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user