Raku kurss / Funkcionālā, paralēlā, reaktīvā un tīmekļa programmēšana / Tīmekļa programmēšana / Cro pamati

Maršruts ar parametru

Iepriekšējās lappuses maršruts vienmēr atgrieza vienu un to pašu tekstu. Īsti pakalpojumi savu atbildi maina atkarībā no tā, ko klients prasa, un vienkāršākais veids ir nolasīt URL daļu kā parametru. Cro maršrutā segments aiz nemainīgā ceļa kļūst par mainīgo parakstā:

use Cro::HTTP::Router;
use Cro::HTTP::Server;

my $application = route {
    get -> 'hello', $name {
        content 'text/plain', "Hello, $name!";
    }
}

my $server = Cro::HTTP::Server.new(
    :host('127.0.0.1'),
    :port(8080),
    :application($application),
);
$server.start;

say 'Listening on http://127.0.0.1:8080 — press Ctrl-C to stop';

react {
    whenever signal(SIGINT) {
        $server.stop;
        done;
    }
}

Interesantākā daļa ir paraksts -> 'hello', $name: tas atbilst divu segmentu ceļam — burtiskajam hello un tad jebkam, kas tiek satverts $name. Pārējā programma ir tāda pati servera sastatne kā iepriekšējā lappusē. Pieprasījums uz /hello/Anna piesaista $name vērtībai Anna un atgriež Hello, Anna!; /hello/Bob atgriež Hello, Bob!. Viens maršruts, atšķirīga atbilde katram vārdam:

$ curl http://127.0.0.1:8080/hello/Anna
Hello, Anna!

Šim piemēram vajadzīgs uzstādīts Cro (zef install cro).

Parametri ir tas, kas maršrutam ļauj palikt mazam, apstrādājot veselu ceļu saimi. Maršruts var ņemt vairākus segmentus, atbilst tikai noteiktām formām, nolasīt vaicājuma virknes un atgriezt JSON — bet tas viss balstās uz šo vienu domu: nosauciet URL mainīgās daļas parakstā un izmantojiet tās atbildē.

Ceļi, kas neatbilst nevienam maršrutam, nav jūsu rūpes: Cro tiem pats atbild ar 404 Not Found. Un, kad maršruts atbilst, bet nespēj piegādāt — teiksim, vārds neko neatrod —, izsauciet apstrādātājā not-found, lai to pašu 404 nosūtītu apzināti. Metode tiek pārbaudīta tikpat stingri kā ceļš: šis bloks deklarē tikai get, tāpēc HEAD vai POST pieprasījums tam pašam ceļam saņem 405 Method Not Allowed. To var redzēt pašam ar curl -I, kas sūta HEAD, nevis GET.

Pakalpojums tomēr ir tikai puse ainas — kādam tas ir jāizsauc. Nākamā lappuse apgriež Cro otrādi un izmanto tā klientu, lai sarunātos ar tādu serveri, kādus tikko uzbūvējāt.

Kursa navigācija

Cro maršruts   |   Klienta moduļa lietošana


💪 Vai arī dodieties tieši uz šīs sadaļas vingrinājumiem.