1
0
mirror of https://github.com/actix/actix-extras.git synced 2024-11-28 09:42:40 +01:00
actix-extras/guide/src/qs_2.md
2018-04-06 14:11:04 -07:00

2.7 KiB
Raw Blame History

Getting Started

Lets 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 --bin
cd hello-world

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

[dependencies]
actix = "0.5"
actix-web = { git="https://github.com/actix/actix-web.git" }

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

A request handler is a function that accepts an HttpRequest instance as its only parameter and returns a type that can be converted into HttpResponse:

Filename: src/main.rs

# extern crate actix_web;
# use actix_web::*;
  fn index(req: HttpRequest) -> &'static str {
      "Hello world!"
  }
# fn main() {}

Next, create an Application instance and register the request handler with the application's resource on a particular HTTP method and path::

# extern crate actix_web;
# use actix_web::*;
# fn index(req: HttpRequest) -> &'static str {
#    "Hello world!"
# }
# fn main() {
   App::new()
       .resource("/", |r| r.f(index));
# }

After that, the application instance can be used with HttpServer to listen for incoming connections. The server accepts a function that should return an HttpHandler instance:

   HttpServer::new(
       || App::new()
           .resource("/", |r| r.f(index)))
       .bind("127.0.0.1:8088")?
       .run();

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

The full source of src/main.rs is listed below:

# use std::thread;
extern crate actix_web;
use actix_web::{server, App, HttpRequest, HttpResponse};

fn index(req: HttpRequest) -> &'static str {
    "Hello world!"
}

fn main() {
#  // In the doctest suite we can't run blocking code - deliberately leak a thread
#  // If copying this example in show-all mode, make sure you skip the thread spawn
#  // call.
#  thread::spawn(|| {
    server::HttpServer::new(
        || App::new()
            .resource("/", |r| r.f(index)))
        .bind("127.0.0.1:8088").expect("Can not bind to 127.0.0.1:8088")
        .run();
#  });
}

Note

: actix web is built upon actix, an actor model framework in Rust.

actix::System initializes actor system, HttpServer is an actor and must run within a properly configured actix system.

For more information, check out the actix documentation and actix guide.