Курс Raku / Функційне, конкурентне, реактивне та веб-програмування / Веб-програмування / Основи Cro
Використання клієнтського модуля
Cro призначений не лише для побудови сервісів — він постачає також HTTP-клієнт для надсилання запитів. Найзрозуміліший спосіб із ним познайомитися — спрямувати його на той самий сервер, який ви збудували на попередній сторінці. Тут обидві половини працюють в одній програмі: ми запускаємо сервіс, а потім самі його викликаємо.
use Cro::HTTP::Router;
use Cro::HTTP::Server;
use Cro::HTTP::Client;
# крихітний сервіс із попередньої сторінки
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;
# а тепер побудьмо клієнтом і викличмо його
my $response = await Cro::HTTP::Client.get('http://127.0.0.1:8080/hello');
say await $response.body-text; # Hello from Cro!
$server.stop;Cro::HTTP::Client.get повертає обіцянку — і це доречно,
бо мережевий запит завершується пізніше, — тож ви робите
await. Об’єкт відповіді знає свій стан, заголовки й тіло;
await $response.body-text повертає текст, який надіслав
сервер, — Hello from Cro!. Порівняйте це із сирим сокетом
із розділу про
з’єднання: жодного \r\n, жодного рядка стану для
розбору, жодного читання в циклі — клієнт і сервер говорять одне з одним
кількома простими рядками.
Цьому прикладові потрібен встановлений Cro (
zef install cro).
Коли сторінки немає
А що, як попросити шлях, якого сервіс не має? На боці сервера все
просто: запит, що не збігається з жодним маршрутом, отримує від Cro
404 Not Found автоматично. На боці клієнта невдалий запит
кидає виняток — помилка мандрує разом з обіцянкою й
вискакує на await, точно як ви бачили зі зламаними обіцянками, —
тож обробляєте ви її звичними засобами для винятків:
my $response = try await Cro::HTTP::Client.get('http://127.0.0.1:8080/goodbye');
if $! {
say 'Request failed with status ', $!.response.status; # 404
}
else {
say await $response.body-text;
}Наш сервіс має маршрут hello, але не має
goodbye, тож це друкує
Request failed with status 404. Виняток несе повну
відповідь у своєму .response, де є код стану та заголовки,
готові до огляду.
Утім, ваш власний сервіс — це лише найближчий сервер, який тільки є. Наступна сторінка спрямовує той самий клієнт на ширший вебпростір — на публічні API, що відповідають JSON-ом або готовим до термінала текстом.
Навігація курсом
← Маршрут з параметром | Запит до публічного API →
💪 Або перейдіть одразу до вправ цього розділу.