169 похожих чатов

Говорят, что Giraffe был вдохновлён концептами из Suave. Посмотрел я

на сурсы второго, и что-то не понял где именно там схожесть.

В жирафе всё строится на этой троице:
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, у них всё на этом работает. Как так?

И вот эту разницу не могу понять. В чём плюсы и минусы обоих подходов?

10 ответов

23 просмотра

Наверное 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" ]; ]

Prunkles- Автор вопроса
Igor
Наверное suave не нужен handler, тк они используют...

Разве? В жирафе поддерживается 3 операции: continue (вызов next), early return (возврат Some ctx), и skip (возврат None). А в суаве, получается, возможно только либо вернуть Some context либо None (не знаю как у них это называется). И в каком-нибудь choose они используют None как раз для индексации того, что нужно взять "не этот обаботчик". Но как там тогда сделать early return в choose? нипонятна

Prunkles
Разве? В жирафе поддерживается 3 операции: continu...

Я когда-то разбирался с суаве (и даже понял), насколько помню если хандлер вернул Some значит всё, реквест обработан, иначе идёт следующий

Prunkles- Автор вопроса
Pavel S
Я когда-то разбирался с суаве (и даже понял), наск...

А, тогда, получается, в суаве нет жирафовского skip? И его наличие как раз позволяет в перф?

Prunkles- Автор вопроса
Pavel S
Не понял что skip в жирафе делает

https://github.com/giraffe-fsharp/Giraffe/blob/master/DOCUMENTATION.md#skip

Prunkles
https://github.com/giraffe-fsharp/Giraffe/blob/mas...

Как я понял, у суайва более простая идея - хандлер вернул Some - всё реквест обработан. Иначе следующий хандлер в пайплайне. В жирафе идея та же, но ради перфа чуть сложнее, передают next в частности

Prunkles- Автор вопроса
Pavel S
Как я понял, у суайва более простая идея - хандлер...

next передают, потому что в жирфе все хэндлеры - мидлвари АСП.нет

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта