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

8 просмотров

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

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

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

здравствуйте. совершаю вот такую вещь: strcpy(line, (char)current_number); где current number — неподписанный шорт, line — массив чаров. ругань следующая: main.c:29:30: error...
Roberto's Ширгозиев
13
Всем привет. Ребят подскажите пожалуйста. Вопрос по дизасемблировани. Начну с начала. У меня есть скомпилированная программа на ГО (я разработчик) - в ней есть защита лицензии...
Zloy
11
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
@MrMiscipitlick А можешь макрос написать, который будет вычислять смещение относительно переданных меток? Просто .label1-.label2, и вернуть значение.
КТ315
35
А еще в перле можно уже @arr1 + @arr2?
Sergei Zhmylove
53
Привет всем. появился вопрос. Разрабатываю сайт, в данный момент он запущен. Хостинг beget. Добавляю на сайт яндекс метрику с помощью полей client-settings (взято отсюда http...
Andrew
2
Заметил в ghci 9.4.8: > :t (<*>) @((->)_) (<*>) @((->)_) :: (w -> (a -> b)) -> (w -> a) -> w -> b Разве не должно (w -> (a -> b)) быть записано как (w -> a -> b)? Это баг, ил...
Михаил
13
Подобного рода ;Следующие три строки это директивы ассемблера, ;которые можно не задавать, т.к.работаем в Visual Studio. ;Символ ";" - это начало однострочного комментария ...
Егор Анелькин
3
Подскажите, где смотреть результат выполнения программы? Код: ;.686 ;Система команд процессора 686 ;.MODEL FLAT,stdcall ;Модель памяти плоская, станда...
Егор Анелькин
5
Any electron dev here?
Sayanth Tezro
12
Карта сайта