Cursus Raku / Functioneel, concurrent, reactief en webprogrammeren / Webprogrammeren / Cro 101
Een route met een parameter
De route op de vorige pagina gaf altijd dezelfde tekst terug. Echte services variëren hun antwoord met wat de client vraagt, en de eenvoudigste manier is een deel van de URL als parameter lezen. In een Cro-route wordt een segment achter het vaste pad een variabele in de signatuur:
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;
}
}Het interessante deel is de signatuur
-> 'hello', $name: die matcht een pad van twee segmenten
— het letterlijke hello, dan wat dan ook, gecapturd in
$name. De rest van het programma is dezelfde serversteiger
als op de vorige pagina. Een verzoek om /hello/Anna bindt
$name aan Anna en geeft
Hello, Anna! terug; /hello/Bob geeft
Hello, Bob! terug. Eén route, een ander antwoord voor elke
naam:
$ curl http://127.0.0.1:8080/hello/Anna
Hello, Anna!Dit voorbeeld heeft Cro geïnstalleerd nodig (
zef install cro).
Parameters zijn hoe een route klein blijft terwijl hij een hele familie paden afhandelt. Een route kan meerdere segmenten aannemen, alleen bepaalde vormen matchen, querystrings lezen en JSON teruggeven — maar het bouwt allemaal op dit ene idee: benoem de variërende delen van de URL in de signatuur en gebruik ze in het antwoord.
Paden die met geen enkele route matchen zijn jouw probleem niet: Cro
beantwoordt ze uit zichzelf met 404 Not Found. En wanneer
een route wél matcht maar niet kan leveren — de naam levert
bijvoorbeeld niets op — roep je binnen de afhandelaar
not-found aan om diezelfde 404 bewust te versturen. De
methode wordt net zo strikt gecontroleerd als het pad:
dit blok verklaart alleen get, dus een HEAD-
of POST-verzoek naar hetzelfde pad wordt met
405 Method Not Allowed beantwoord. Je kunt het zelf zien
met curl -I, dat HEAD in plaats van
GET verstuurt.
Een service is echter maar de halve foto — er moet iets zijn dat haar aanroept. De volgende pagina draait Cro om en gebruikt zijn client om met een server als degene die je net gebouwd hebt te praten.
Cursusnavigatie
← Een Cro-route | Een clientmodule gebruiken →
💪 Of ga direct naar de
oefeningen in deze sectie.