на сурсы второго, и что-то не понял где именно там схожесть.
В жирафе всё строится на этой троице:
type HttpFuncResult = Task<HttpContext option>
type HttpFunc = HttpContext -> HttpFuncResult
type HttpHandler = HttpFunc -> HttpContext -> HttpFuncResult
Что, в целом, практически аналогично асповским миддлварям.
Тогда как в суаве (или как это правильно читается), как я понял, в основе лежит это:
type WebPart<'a> = 'a -> Async<'a option>
type WebPart = WebPart<HttpContext>
Но ведь это же жирафовский HttpFunc! Не HttpHandler. Получается, у них нет next, у них всё на этом работает. Как так?
И вот эту разницу не могу понять. В чём плюсы и минусы обоих подходов?
Наверное suave не нужен handler, тк они используют ленивую Async
Суаве это полноценный веб сервер если что, который можно поднять одной строкой (кестрел так не поднимается). Жираф полностью спиздил синтаксис и идею композиции хендлеров из суаве, но натянул эту идею поверх готового аспнеткора Вот это суаве let myApp = choose [ GET >=> choose [ path "/hello" >=> OK "Hello GET" ; path "/goodbye" >=> OK "Good bye GET" ]; POST >=> choose [ path "/hello" >=> OK "Hello POST" ; path "/goodbye" >=> OK "Good bye POST" ]; DELETE >=> choose [ path "/hello" >=> OK "Hello DELETE" ; path "/goodbye" >=> OK "Good bye DELETE" ]; PUT >=> choose [ path "/hello" >=> OK "Hello PUT" ; path "/goodbye" >=> OK "Good bye PUT" ]; ]
Разве? В жирафе поддерживается 3 операции: continue (вызов next), early return (возврат Some ctx), и skip (возврат None). А в суаве, получается, возможно только либо вернуть Some context либо None (не знаю как у них это называется). И в каком-нибудь choose они используют None как раз для индексации того, что нужно взять "не этот обаботчик". Но как там тогда сделать early return в choose? нипонятна
Я когда-то разбирался с суаве (и даже понял), насколько помню если хандлер вернул Some значит всё, реквест обработан, иначе идёт следующий
А, тогда, получается, в суаве нет жирафовского skip? И его наличие как раз позволяет в перф?
Не понял что skip в жирафе делает
https://github.com/giraffe-fsharp/Giraffe/blob/master/DOCUMENTATION.md#skip
Как я понял, у суайва более простая идея - хандлер вернул Some - всё реквест обработан. Иначе следующий хандлер в пайплайне. В жирафе идея та же, но ради перфа чуть сложнее, передают next в частности
Понял. Спасибо за разъяснения
next передают, потому что в жирфе все хэндлеры - мидлвари АСП.нет
Обсуждают сегодня