1
0
mirror of https://github.com/fafhrd91/actix-web synced 2024-11-30 18:44:35 +01:00
actix-web/guide/src/qs_2.md
2018-02-27 23:31:43 -08:00

2.7 KiB
Raw Blame History

Getting Started

Lets create and run our first actix web application. Well create a new Cargo project that depends on actix web and then run the application.

In previous section we already installed required rust version. Now let's create new cargo projects.

Hello, world!

Lets write our first actix web application! 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 = "0.4"

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

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

# 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() {
   Application::new()
       .resource("/", |r| r.f(index));
# }

After that, application instance can be used with HttpServer to listen for incoming connections. Server accepts function that should return HttpHandler instance:

   HttpServer::new(
       || Application::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.

Here is full source of main.rs file:

# use std::thread;
extern crate actix_web;
use actix_web::*;

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(|| {
    HttpServer::new(
        || Application::new()
            .resource("/", |r| r.f(index)))
        .bind("127.0.0.1:8088").expect("Can not bind to 127.0.0.1:8088")
        .run();
#  });
}

Note on actix crate. Actix web framework is built on top of actix actor library. actix::System initializes actor system, HttpServer is an actor and must run within properly configured actix system. For more information please check actix documentation