Getting Started

Getting Started

Let’s write our first actix-web application!

Hello, world!

Start by creating a new binary-based Cargo project and changing into the new directory:

cargo new hello-world
cd hello-world

Now, add actix-web as dependencies of your project by ensuring your Cargo.toml contains the following:

[dependencies]
actix-web = "1.0"

In order to implement a web server, we first need to create a request handler.

A request handler is a function that accepts zero or more parameters that can be extracted from a request (ie, impl FromRequest) and returns a type that can be converted into an HttpResponse (ie, impl Responder):

use actix_web::{web, App, HttpResponse, HttpServer, Responder};

fn index() -> impl Responder {
    HttpResponse::Ok().body("Hello world!")
}

fn index2() -> impl Responder {
    HttpResponse::Ok().body("Hello world again!")
}

Next, create an App instance and register the request handler with the application’s route on a path and with a particular HTTP method. After that, the application instance can be used with HttpServer to listen for incoming connections. The server accepts a function that should return an application factory.

fn main() {
    HttpServer::new(|| {
        App::new()
            .route("/", web::get().to(index))
            .route("/again", web::get().to(index2))
    })
    .bind("127.0.0.1:8088")
    .unwrap()
    .run()
    .unwrap();
}

That’s it! Now, compile and run the program with cargo run. Head over to http://localhost:8088/ to see the results.

If you want, you can have an automatic reloading server during development that recompiles on demand. To see how this can be accomplished have a look at the autoreload pattern.

Next up: Application