Курс по 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   |   Използване на клиентски модул


💪 Или преминете направо към упражненията в този раздел.