go-mux-http

module
v0.0.0-...-906416d Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 14, 2023 License: MIT

README

go-mux-http

codecov Go Report Card

Библиотека для запуска net/http Handler. (Порт библиотеки https://alexpts.github.io/go-next-docs/ совместимый с net/http вместо fastHttp)

Документация

Отличия от http.ServeMux

  • Возможность приоритизации обработчиков (параметр priority: int).
  • Поддержка RegExp в путях (возможность описать множество uri 1 правилом).
  • Поддержка захвата переменных из пути маршрута.
  • Наложение ограничений на любую переменную из пути маршрута через regexp.
  • Возможность фильтрации обработчиков по пути, HTTP методу, regexp, параметрам и т.д.
  • Возможность использовать кастомный resolver для фильтрации слоев со своей собственной логикой.
Примеры вариаций и комбинаций подходов

Легенда:

h - http.Handler

m - http.ServeMux

app - go-mux-runner/mux/MicroApp


Стандартные middleware с делегированием (обертками). Классическая нативная цепочка из middleware http.Handler:

h(h) -> (h(h)) -> h(h)


http Mux сервер, регистрирует обработчики по путям (1 путь - 1 обработчик), но цепочки обработчиков нужно делать как в пункте 1:

mux(h) -> (h(h)) -> h(h)


go-mux-http позволяет регистрировать обработчики с повторяющимися путями (либо сопоставлять по regexp разные пути в 1 правило), можно строить различные цепочки из обработчиков. Можно применять в 1 проекте оба подхода и сосуществовать. Можно гибко делегировать управление и из http.Handler обработчиков в mux_runner, так же как и из mux_runner в http.Handler (все очень гибко).

app(h) -> app(h) -> app(h) - все обработчики описаны в формате go-mux-runner, удобно для новых приложений;

app(h) -> h(h) -> h(h) - можно использовать из пункта 1 нативные цепочки обработчиков (менее гибко);

h(h) -> h(h) -> h(app) -> app(h) - можно из обработчика делегировать управление в mux_runner на любом этапе;

app(h) -> app(h) -> h(h) -> h(h) - можно из mux_runner делегировать управление в http.Handle цепочку на любом этапе (и обратно);

FAQ

Q: Как в handler слоя указывать уже обернутый обработчик?

A: Так же как и не обернутый http.Handler по интерфейсу ничем не отличается и может сам делегировать обернутым обработчикам (нативно).

A: Передавать обработчики в слой в виде множества обработчиков, в каждом обработчике пре делегировании управления следующему обработчику вызывать снова app.ServerHTTP(w, r) на приложении. Приложение под капотом будет итерироваться дальше по слоям и обработчикам.

A: Можно запустить как обработчик другой mux

Example

Examples

Directories

Path Synopsis
mux

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL