Cro
The Cro project is being transferred to the Raku community. Find out more.

Creating a simple HTTP application

Cro HTTP applications are hosted using its built-in HTTP server. To start out, we import it:

use Cro::HTTP::Server;

The server hosts an application, which is something that transforms a Cro::HTTP::Request instance representing the request into a Cro::HTTP::Response instance representing the response. While it's possible to write that "by hand," it is far more convenient to use the HTTP router.

use Cro::HTTP::Router;

The Cro::HTTP::Router module provides a convenient API for mapping incoming requests to appropriate handlers. It also provides routines to make it quick and easy to produce the most common kinds of responses. Here is a simple example:

my $application = route {
    get -> {
        content 'text/html', 'Hello World!';
    }
}

Routines like get, post, and delete indicate the HTTP method, while the signature part represents the target of the request. The absence of parameters counts as /. Let's see some more examples:

my $application = route {
    get -> {
        content 'text/html', 'Home';
    }
    post -> 'poster' {
        content 'text/html', 'Post request to /poster page';
    }
    get -> 'articles', $author, $name {
        content 'text/html', "<h1>{$name}<h1><em>By {$author}</em>";
    }
}

An application created with route can be easily used with Cro::HTTP::Server:

# Create the HTTP service object
my Cro::Service $service = Cro::HTTP::Server.new(
    :host('localhost'), :port(2314), :$application
);

# Run it
$service.start;

# Cleanly shut down on Ctrl-C
react whenever signal(SIGINT) {
    $service.stop;
    exit;
}

With this the application is up and running, so it's time to improve it: add more logic and use other features. See Cro::HTTP::Router and Cro::HTTP::Server to learn more.