Ребята из Posit переосмыслили
plumber и выпустили plumber2. И это не «plumber v2», а полноценный перезапуск API-фреймворка для R.Идея простая: чинить старую архитектуру дальше было бессмысленно — накопилось слишком много компромиссов.
В
plumber:• смешивались path / query / body параметры
• filters и preempt добавляли много магии и мало прозрачности
• аннотации и документация были ограничены
• архитектура плохо подходила для async и масштабирования
В
plumber2 это всё пересобрали:• чётко разделили параметры запроса
• path → аргументы функции, query → query, body → body
• полностью переработали аннотации (типы, default, enum, OpenAPI)
• убрали filters и preempt
• построили сервер на fiery, request/response — на reqres
• заложили поддержку async и WebSockets
# Было (plumber)
#* @get /user/<id>
function(id, name) { ... }
# Стало (plumber2)
#* @get /user/<id:int>
#* @async
function(id, query) {
# id — строго из пути
# query$name — из параметров запроса
# Выполняется асинхронно!
}
Важно:
plumber2 не обратно совместим с plumber — это осознанное архитектурное решение.Итог простой:
plumber доказал, что API на R возможны, а plumber2 делает их архитектурно нормальными — ближе к FastAPI-подходу, но в R-экосистеме.Со всей документацией можно ознакомиться по ссылке.
#новости_и_релизы_по_R