daas workshop
  • Hands-On experience building a Data as a Service Platform
  • Set Up
    • Creating a Workstation
    • Installing Tools
    • Starting Kafka
    • Congratulations
  • Module I - Overview of the DaaS Pattern
    • Section I - The Overall Pattern
    • Section II - Data Sourcing
    • Section III - Data Provisioning
    • Section IV - Data Consumption
  • Module II - Building a Rust Project
    • Section I - Create a Package
    • Section II - Creating a Library
    • Section III - Creating an Executable
    • Section IV - Creating a Hello World RESTful Endpoint
      • Section IV - manifest
      • Section IV - library
      • Section IV - module
      • Section IV - integrated testing
      • Section IV - executable
  • Module III - Building a RESTful Endpoint for Sourcing Data
    • Section I - Overview
    • Section II - manifest
    • Section III - executable
    • Section IV - starting the service
    • Section V - service testing
  • Module IV - Building a Genesis Microservice for Processing the Sourced Data
    • Section I - Overview
    • Section II - manifest
    • Section III - executable
    • Section IV - starting the service
    • Section V - service testing
  • Module V - Building a Provisioning Microservice
    • Section I - Overview
    • Section II - manifest
    • Section III - executable
    • Section IV - starting the service
    • Section V - adding the business logic
    • Section VI - testing the service
  • Module VI - Building a RESTful Endpoint for Publishing Reporting Data
    • Section I - Overview
    • Section II - manifest
    • Section III - executable
    • Section IV - starting the service
    • Section V - adding the business logic
    • Section VI - testing the service
  • Privacy Design Strategies
  • Further Exploration
Powered by GitBook
On this page

Was this helpful?

  1. Module II - Building a Rust Project
  2. Section IV - Creating a Hello World RESTful Endpoint

Section IV - executable

PreviousSection IV - integrated testingNextModule III - Building a RESTful Endpoint for Sourcing Data

Last updated 4 years ago

Was this helpful?

Once we have created our service and all the tests have passed, we are ready to build out the executable and run our service.

Add Log functionality

Since is eleventh factor in a 12 Factor Application, we will enable this attribute by implementing automated logging for this RESTful endpoint. by including the and creates.

We start by first adding the log and env_logger crates to the Cargo.toml manifest.

[dependencies]
log = "0.4"
env_logger = "0.8"
actix-web = "3"

Next, we update the lib.rs file to include the logging creates and modules.

We place the extern crate declarations for these crates at the top (so that they are shared in the project).

extern crate log;
extern crate env_logger;
extern crate actix_web;

The final lib.rs file should look like this:

extern crate log;
extern crate env_logger;
extern crate actix_web;

static VER: &str = "v1";

pub mod hello_world;

Writing the executable

Now that we have the dependent crates and modules declared in our library, we can call the service in an executable.

In the hello-world.rs file in the bin directory, rewrite the file so it looks like the following:

use myapp::hello_world;
use actix_web::{web, App, HttpServer};
use actix_web::middleware::Logger;

#[actix_web::main]
async fn main() -> std::io::Result<()> {
    std::env::set_var("RUST_LOG", "actix_web=info");
    env_logger::init();

    HttpServer::new(|| App::new()
        .wrap(Logger::default())
        .wrap(Logger::new("%a %{User-Agent}i"))
        .route(
            &hello_world::get_service_path(), 
            web::get().to(hello_world::index)))
        .bind("127.0.0.1:7999")?
        .run()
        .await
}

Noteworthy: we call the module and its functionality by using the following code snippets:

  • use myapp::hello_world;

  • &hello_world::get_service_path()

  • hello_world::index

Make sure all your tests are still passing by using the cargo test command.

Starting the service

We are now ready to start the RESTful service. There are 2 ways to start the service.

  1. Running using cargo run command while developing (local service testing)

ArchConfWorkshopUser:~/environment/rust-daas (master) $ cargo run
    Finished dev [unoptimized + debuginfo] target(s) in 0.10s
     Running `target/debug/hello_world`

Since we are working on a virtual machine , we will use curl to call our services.

Run the following script.

NOTE: Make sure you are in the environment directory. cd $HOME/environment

./scripts/curl-hello.sh

You should see the message Hello World!

On the command line where the service is running, you will notice that the calls are being logged and printed to the console.

[2020-11-04T18:36:43Z INFO  actix_web::middleware::logger] 127.0.0.1:50882 curl/7.61.1
[2020-11-04T18:36:43Z INFO  actix_web::middleware::logger] 127.0.0.1:50882 "GET /hello/v1/ HTTP/1.1" 200 12 "-" "curl/7.61.1" 0.000212

To stop the service, use ctrl + c.

2. Running using the executable.

PS C:\workspace\rust-daas> cargo build
    Finished dev [unoptimized + debuginfo] target(s) in 0.37s

Whenever you use the cargo build command, it places the created executable in the target/debug directory with the same name that was defined in the Cargo.toml manifest.

Since it is an executable, simple run the executable from the command terminal, and make the same URL call from the browser.

NOTE: Example below is for Windows.

C:\workspace\demo\rust-daas\target\debug>hello_world.exe
[2019-10-23T14:49:19Z INFO  actix_web::middleware::logger] 127.0.0.1:65360 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36
[2019-10-23T14:49:19Z INFO  actix_web::middleware::logger] 127.0.0.1:65360 "GET /hello/v1/ HTTP/1.1" 200 12 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36" 0.000948
hello-world.rs
Logs
log
env_logger