Курс Raku / Функційне, конкурентне, реактивне та веб-програмування / Веб-програмування / Основи Cro
Маршрут Cro
HTTP-сервіс на Cro описують набором маршрутів: кожен маршрут
каже, який URL він обробляє і що повертає. Ви будуєте їх усередині блоку
route за допомогою ключового слова get:
use Cro::HTTP::Router;
use Cro::HTTP::Server;
my $application = route {
get -> 'hello' {
content 'text/plain', 'Hello from Cro!';
}
}
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/hello — press Ctrl-C to stop';
react {
whenever signal(SIGINT) {
$server.stop;
done;
}
}Читайте маршрут так: «запит GET до шляху
hello повертає текст Hello from Cro!». Функція
content задає і тип вмісту, і тіло — жодних ручних рядків
стану чи \r\n на горизонті. Cro::HTTP::Server
прив’язує маршрути до адреси та порту, а .start починає
обслуговування.
Одна тонкість: .start не блокує
виконання — він запускає сервіс у фонових потоках і повертається одразу,
і якби програма просто на цьому завершилася, сервер зник би разом із
нею. Живою програму тримає завершальний блок react, і це
давній знайомий: whenever signal(SIGINT) реагує на сигнал
переривання (Ctrl-C на клавіатурі) тим, що спиняє сервер і викликає
done. Реактивні засоби з попередніх розділів цієї частини —
це рівно те, як програма на Cro чекає, обслуговує й чисто
завершується.
Цьому прикладові потрібен встановлений Cro (
zef install cro). Запустіть його, відкрийтеhttp://127.0.0.1:8080/hello, а коли закінчите — спиніть сервер через Ctrl-C.
Не хвилюйтеся, якщо сервер час від часу друкує
Cannot write to a closed socket, поки ви гортаєте сторінки. Це не помилка у вашому коді: клієнт — зазвичай браузер — відкрив з’єднання й покинув його, не прочитавши відповіді, як браузери звично роблять зі спекулятивними чи скасованими запитами. Cro занотовує зниклого клієнта, а сервер обслуговує далі.
Маршрут може приймати сегменти URL як параметри, повертати JSON і багато чого ще, але форма завжди така: оголоси, що робить кожен шлях, передай маршрути серверові й запусти його. Порівняно з сервером на сирих сокетах із попереднього розділу, Cro прибирає весь протокольний облік і дозволяє писати лише ту частину, що властива саме вашому сервісу.
Утім, цей маршрут завжди каже те саме. Наступна сторінка дозволяє
маршрутові прочитати параметр з URL, щоб один маршрут
вітав /hello/Anna та /hello/Bob
по-різному.
Навігація курсом
← Тест — Cro | Маршрут з параметром →
💪 Або перейдіть одразу до вправ цього розділу.