Курс по Raku / Функционално, паралелно, реактивно и уеб програмиране / Уеб програмиране / Основи на Cro
Маршрут с параметър
Маршрутът от предишната страница винаги връщаше един и същ текст. Истинските услуги менят отговора си според онова, което клиентът иска, а най-простият начин е да се прочете част от URL адреса като параметър. В маршрут на Cro сегмент след фиксирания път става променлива в сигнатурата:
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;
}
}Интересната част е сигнатурата -> 'hello', $name: тя
съвпада с път от два сегмента — буквалното hello, а после
каквото и да е, прихванато в $name. Останалата част от
програмата е същата сървърна обвивка като на предишната страница. Заявка
за /hello/Anna свързва $name с
Anna и връща Hello, Anna!;
/hello/Bob връща Hello, Bob!. Един маршрут,
различен отговор за всяко име:
$ curl http://127.0.0.1:8080/hello/Anna
Hello, Anna!Този пример се нуждае от инсталиран Cro (
zef install cro).
Параметрите са начинът маршрутът да остане малък, обслужвайки цяло семейство от пътища. Маршрутът може да приема няколко сегмента, да съвпада само с определени форми, да чете низове на заявката и да връща JSON — но всичко това се гради върху една идея: назовете променливите части на URL адреса в сигнатурата и ги използвайте в отговора.
Пътищата, които не съвпадат с никакъв маршрут, не са ваш проблем: Cro
сам им отговаря с 404 Not Found. А когато маршрут
съвпадне, но не може да достави нищо — да речем, името не
намира нищо, — извикайте not-found вътре в обработчика, за
да изпратите същия 404 нарочно. Методът се проверява
също толкова строго, колкото и пътят: този блок обявява само
get, така че на заявка HEAD или
POST към същия път се отговаря с
405 Method Not Allowed. Можете да го видите сами с
curl -I, който изпраща HEAD, а не
GET.
Услугата обаче е само половината картина — нещо трябва да я вика. Следващата страница обръща Cro и използва нейния клиент, за да говори със сървър като онези, които току-що изградихте.
Навигация в курса
← Маршрут в Cro | Използване на клиентски модул →
💪 Или преминете направо към упражненията в този
раздел.