Курс 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   |   Використання клієнтського модуля


💪 Або перейдіть одразу до вправ цього розділу.