Creating a health check endpoint
We're going to get rid of the previous endpoints and create a health check endpoint. This endpoint will be used to check if the application is running and ready to receive requests.
This endpoint will be very basic and will just return a 200 OK response with custom header containing the version (this is just for fun, not really needed at all).
Armed with the knowledge we've gained so far, we should be able to handle this change.
- The route should be
/health
and use theGET
method. - The response should be a
200 OK
with a custom header namedversion
containing the version (a&str
containing "v0.0.1" for example). - As a hint, you can check the code in Actix Web docs to see how to return a simple
200 OK
response. - You can also check out the HttpResponse docs to see how to add a header to the response.
Can you do it?
Solution
Solution
- Remove the previous endpoints.
- Create a new endpoint with the route
/health
and the methodGET
.
#![allow(unused)] fn main() { use actix_web::{get, HttpResponse}; #[get("/health")] async fn health() -> HttpResponse { HttpResponse::Ok() .append_header(("version", "0.0.1")) .finish() } }
- Configure the services in your shuttle crate. Remove the previous services and add the new one.
Your api > shuttle > src > main.rs
file should look like this:
#![allow(unused)] fn main() { use actix_web::web::ServiceConfig; use api_lib::health::health; use shuttle_actix_web::ShuttleActixWeb; use shuttle_runtime::CustomError; use sqlx::Executor; #[shuttle_runtime::main] async fn actix_web( #[shuttle_shared_db::Postgres] pool: sqlx::PgPool, ) -> ShuttleActixWeb<impl FnOnce(&mut ServiceConfig) + Send + Clone + 'static> { // initialize the database if not already initialized pool.execute(include_str!("../../db/schema.sql")) .await .map_err(CustomError::new)?; let pool = actix_web::web::Data::new(pool); let config = move |cfg: &mut ServiceConfig| { cfg.app_data(pool).service(health); }; Ok(config.into()) } }
Test that everything is working by running the following command:
curl -i http://localhost:8000/health
You should get something like this:
HTTP/1.1 200 OK
content-length: 0
version: v0.0.1
date: Sun, 02 Jul 2023 10:35:15 GMT
Commit your changes.
git add .
git commit -m "add health check endpoint"