В настоящее время я пытаюсь реализовать следующий шаблон с функциями, конвейерами и перехватчиками:
auth {
limit(1) {
get {
call.respond("Cake1")
}
}
}
В обеих функциях я использую это:
pipeline.insertPhaseAfter(ApplicationCallPipeline.Features, myCustomPhase)
pipeline.intercept(appTokenAuthPhase)
У меня две проблемы:
- При использовании PhaseAfter неправильный порядок. Первым должен быть вызван Auth, вторым - Limit. Почему лимит на первом месте? Как я могу предотвратить это? Примечание: это всегда должно зависеть от кодовой последовательности, первый блок должен выполняться первым. По неизвестной причине с PhaseBefore он работает должным образом. Но это кажется непоследовательным. Эти методы помещают Фазу в другие Фазы, но не выполняют Упорядочивание для слияния. Как это сделать?
insertPhaseAfter
[Фаза («Настройка»), Фаза («Мониторинг»), Фаза («Функции»), Фаза («Предел»), Фаза («Вызов»), Фаза («Откат»)]
[Фаза ('Настройка'), Фаза ('Мониторинг'), Фаза ('Функции'), Фаза ('Auth'), Фаза ('Вызов'), Фаза ('Откат')]
insertPhaseBefore
[Фаза ('Настройка'), Фаза ('Мониторинг'), Фаза ('Подтверждение'), Фаза ('Функции'), Фаза ('Вызов'), Фаза ('Откат')]
[Фаза («Настройка»), Фаза («Мониторинг»), Фаза («Предел»), Фаза («Характеристики»), Фаза («Вызов»), Фаза («Откат»)]
- Я хочу удалить Phase Interceptors.
rate(100) {
route("/sub") {
rate(5) {
get("/critical") {
call.respondText("Hello, World!")
}
}
get("/profile/{id}") { TODO("...") }
}
}
Таким образом, для / sub / critical следует вызывать только перехватчик со скоростью (5), а скорость (100) следует пропускать. Возможно ли это в нынешней архитектуре? Я не вижу способа отменить слияние и удалить все, кроме «последнего» перехватчика для «Предела» фазы. Другой «Предел» должен оставаться на месте для всех конвейеров без «Предела» в качестве дочернего элемента. Другие перехватчики (например, Auth) должны выполняться как обычно.