Курс 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 | Використання клієнтського модуля →
💪 Або перейдіть одразу до вправ цього розділу.