ORGPROG Telegram 384
Именованный роутинг

Как в большинстве бекенд фреймворков определяются роуты? Мы описываем шаблон маршрута, например, /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
👍2819🔥7💩5👀2👏1🤔1



tgoop.com/orgprog/384
Create:
Last Update:

Именованный роутинг

Как в большинстве бекенд фреймворков определяются роуты? Мы описываем шаблон маршрута, например, /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

BY Организованное программирование | Кирилл Мокевнин


Share with your friend now:
tgoop.com/orgprog/384

View MORE
Open in Telegram


Telegram News

Date: |

Choose quality over quantity. Remember that one high-quality post is better than five short publications of questionable value. When choosing the right name for your Telegram channel, use the language of your target audience. The name must sum up the essence of your channel in 1-3 words. If you’re planning to expand your Telegram audience, it makes sense to incorporate keywords into your name. Ng was convicted in April for conspiracy to incite a riot, public nuisance, arson, criminal damage, manufacturing of explosives, administering poison and wounding with intent to do grievous bodily harm between October 2019 and June 2020. Those being doxxed include outgoing Chief Executive Carrie Lam Cheng Yuet-ngor, Chung and police assistant commissioner Joe Chan Tung, who heads police's cyber security and technology crime bureau. Write your hashtags in the language of your target audience.
from us


Telegram Организованное программирование | Кирилл Мокевнин
FROM American