TGViewer
Организованное программирование | Кирилл Мокевнин Организованное программирование | Кирилл Мокевнин @orgprog · 14.3K subscribers
Post #384 11K
Именованный роутинг

Как в большинстве бекенд фреймворков определяются роуты? Мы описываем шаблон маршрута, например, /products/:id, который связываем с обработчиком. Например:


fastify.get('/products/:id', (request, reply) {
return { hello: 'world' }
})


Это все хорошо работает, до тех пор, пока нам не нужно на эти маршруты ссылаться. Что мне придется сделать, если из одного такого обработчика, понадобится сделать редирект куда-то? Почти наверняка это будет конкатенация или интерполяция чтобы собрать нужный адрес: const url = "/products" + id. И все, приплыли.

Никаких гарантий, что это будет работать. Поменяли маршрут в одном месте, в других все поломалось и без хороших тестов или ручной проверки этого не отследить. Я уже не говорю про отсутствие автокомплита, придется каждый раз искать, а что там за маршрут.

С фронтендом будет похожая ситуация, если не используется какая-нибудь автогенерация sdk по openapi. В этом случае серверные маршруты где-то будут хардкодиться напрямую в клиентских приложениях.

Что собственно делать? Если фреймворк поддерживает именованные маршруты, то использовать их, если нет - найти либы, которые добавляют такую поддержку в ваш фреймворк. Либо встроить эту поддержку если вам интересен опенсорс.


/func main() {
app := fiber.New()

// Именованный маршрут
app.Get("/users/:id", func(c *fiber.Ctx) error {
return c.SendString("User " + c.Params("id"))
}).Name("user.show")

// Генерация URL по имени
app.Get("/", func(c *fiber.Ctx) error {
url := app.GetRoute("user.show").URL(fiber.Map{
"id": "42",
})
return c.SendString("URL: " + url)
})

app.Listen(":3000")
}


⁃ Gin (go): поддержки нет, но люди хотят https://github.com/gin-gonic/gin/issues/3795
⁃ Spring Boot (java): поддержка есть из коробки, но сборка урла многословная
⁃ В Rails, Laravel, Django встроенная поддержка

Но это только на уровне бека. А что насчет фронта? Под некоторые фреймворки реализованы либы, которые берут серверный роутинг и переносят его во фронтенд причем с типами ts, например для рельсы мы юзаем https://github.com/railsware/js-routes. Я знаю что такой же есть в пыхе.


import { post_path } from '../routes';

alert(post_path(1))


Ссылки: Телеграм | Youtube | VK
GitHub How to add a name to the gin route like laravel? · Issue #3795 · gin-gonic/gin Description Question detail:https://stackoverflow.com/questions/77618417/how-to-add-a-name-to-the-gin-route-like-laravel I want to add a name to the gin route because I need to collect all the rout...
  • 👍 30
  • ❤ 20
  • 🔥 7
  • 💩 5
  • 👀 2
  • 👏 1
  • 🤔 1
More from @orgprog
  1. Oct 1, 2026Статистика по задачам. Как повлиял ии? Заметил интересный эффект. По мере внедрения агенто…
  2. Sep 29, 2026Плановое обслуживание кода Даже если вы настроили у себя процесс разработки, в котором все…
  3. Sep 27, 2026Выпуск опубликован, можно смотреть и слушать. Сегодня в подкасте создатель Вастрик Клуба В…
  4. Sep 26, 2026Костные наушники Под каждым видео коммент, что за наушники ты носишь? Это костные наушники…
  5. Sep 24, 2026Статистика участия в опенсорсе Активно разрабатывая я регулярно наыткаюсь на баги и не дор…
  6. Sep 21, 2026Банда четырех для эпохи агентов Количество паттернов по тому, как эффективно работать с ИИ…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →