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 ответов

20 просмотров

Наверное 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 передают, потому что в жирфе все хэндлеры - мидлвари АСП.нет

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

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

Добрый вечер. Есть вопрос, а может и предложение. Был у меня диалог в другой группе о делфи и я задался вопросом: "А нельзя ли в делфи цвет //коментария и {комментария} сде...
Kraszx
24
Всем привет! Подскажи, пожалуйста, как передать в TComboBox сразу значение и id записи. На Delphi я делал так: ComboBox1.Items.AddObject('Какое-то значение', Pointer(id запис...
Евгений
13
Мдя, прикол, боевая сборка запускается (именно под отладчиком) после F9 примерно полторы минуты (97 секунд если быть точным). Начал копать - проблема детектится сразу - зависа...
Александр (Rouse_) Багель
38
Здравствуйте, вопрос по структурам данных. Были у вас случаи, когда пришлось писать деревья или двунаправленные списки?
/ /
50
Товарищи, кто работа с iphelper? Или может я в самой логике ошибки фигачу, не пойму.... var ifTable : PMIB_IFTABLE; size, corSize: DWORD; Buffer ...
Warfarellen
4
я так понимаю, я так подозреваю, что создание такого плагина для человека, кто умеет писать плагины для делфи потребует минут 5-10 времени. но это мое подозрение. хотелось бы ...
Kraszx
7
Коллеги, добрый вечер. Создаю коллекцию от TFPGMap, ключ - перечисление, значение - целое. Нужно отсортировать коллекцию по значению. Как это можно сделать?
Kirill Filippenok
11
Скажи а ты когда этот канал создавал ты уже дельфи не любил, или это со временем пришло?
Роман Лях (rgreat)
18
Привет, такой вопросик появился кажется ли вам что Rust слишком сложный/строгий для высокоуровневого программирования и слишком "безопасный"/строгий для низкоуровневого?
Крокант
10
Всем привет! Использую кастомное модальное диалоговое окошко, все по классике - mrOK, mrCancel как ModalResult. Однако есть нюанс - в главной форме есть универсальный обработч...
Олег Гранишевский
20
Карта сайта