This fixes #105
2.3 KiB
title | menu | weight |
---|---|---|
Getting Started | docs_basics | 130 |
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 = "{{< actix-version "actix-web" >}}"
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
):
{{< include-example example="getting-started" section="setup" >}}
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.
{{< include-example example="getting-started" section="main" >}}
That's it! Now, compile and run the program with cargo run
.
Head over to http://localhost:8088/
to see the results.
Alternative syntax
You might prefer the alternative syntax provided by actix-web-codegen which allows you to specify the routes above your functions like so:
{{< include-example example="getting-started" section="alternative">}}
You can then declare this function using service()
:
App::new()
.service(index3)
For consistency reasons, this documentation only uses the regular syntax shown at the beginning of this page. However, if you prefer this syntax you should feel free to use it any time you declare a route as it's only syntactic sugar.
Auto-reloading
If you want, you can have an automatically reloading server during development that recompiles on demand. This isn't necessary, but it makes rapid prototyping more convenient as you can see changes instantly upon saving. To see how this can be accomplished, have a look at the autoreload pattern.