refactor: switch HTTP API to Service pattern

This commit is contained in:
ThinkChaos 2024-04-02 22:17:05 -04:00
parent e1c717be70
commit 1515e17f0f
No known key found for this signature in database
8 changed files with 50 additions and 9 deletions

View File

@ -53,7 +53,7 @@ type CacheControl interface {
FlushCaches(ctx context.Context)
}
func RegisterOpenAPIEndpoints(router chi.Router, impl StrictServerInterface) {
func registerOpenAPIEndpoints(router chi.Router, impl StrictServerInterface) {
middleware := []StrictMiddlewareFunc{ctxWithHTTPRequestMiddleware}
HandlerFromMuxWithBaseURL(NewStrictHandler(impl, middleware), router, "/api")

View File

@ -105,7 +105,7 @@ var _ = Describe("API implementation tests", func() {
Describe("RegisterOpenAPIEndpoints", func() {
It("adds routes", func() {
rtr := chi.NewRouter()
RegisterOpenAPIEndpoints(rtr, sut)
registerOpenAPIEndpoints(rtr, sut)
Expect(rtr.Routes()).ShouldNot(BeEmpty())
})

39
api/service.go Normal file
View File

@ -0,0 +1,39 @@
package api
import (
"github.com/0xERR0R/blocky/config"
"github.com/0xERR0R/blocky/service"
"github.com/0xERR0R/blocky/util"
"github.com/go-chi/chi/v5"
)
// Service implements service.HTTPService.
type Service struct {
service.HTTPInfo
}
func NewService(cfg config.APIService, server StrictServerInterface) *Service {
endpoints := util.ConcatSlices(
service.EndpointsFromAddrs(service.HTTPProtocol, cfg.Addrs.HTTP),
service.EndpointsFromAddrs(service.HTTPSProtocol, cfg.Addrs.HTTPS),
)
s := &Service{
HTTPInfo: service.HTTPInfo{
Info: service.Info{
Name: "API",
Endpoints: endpoints,
},
Mux: chi.NewMux(),
},
}
registerOpenAPIEndpoints(s.Mux, server)
return s
}
func (s *Service) Merge(other service.Service) (service.Merger, error) {
return service.MergeHTTP(s, other)
}

View File

@ -271,6 +271,7 @@ type Config struct {
// The `yaml` struct tags are just for manual testing,
// and require replacing `yaml:"-"` in Config to work.
type Services struct {
API APIService `yaml:"control-api"`
DoH DoHService `yaml:"dns-over-https"`
Metrics MetricsService `yaml:"metrics"`
}
@ -625,6 +626,7 @@ func (cfg *Config) CopyPortsToServices() {
}
cfg.Services = Services{
API: APIService{Addrs: httpAddrs},
DoH: DoHService{Addrs: httpAddrs},
Metrics: MetricsService{Addrs: httpAddrs},
}

View File

@ -1,6 +1,7 @@
package config
type (
APIService httpService
DoHService httpService
MetricsService httpService
)

View File

@ -6,7 +6,6 @@ import (
"net/http"
"time"
"github.com/0xERR0R/blocky/api"
"github.com/0xERR0R/blocky/config"
"github.com/0xERR0R/blocky/service"
"github.com/0xERR0R/blocky/util"
@ -23,7 +22,7 @@ type httpMiscService struct {
service.HTTPInfo
}
func newHTTPMiscService(cfg *config.Config, openAPIImpl api.StrictServerInterface) *httpMiscService {
func newHTTPMiscService(cfg *config.Config) *httpMiscService {
endpoints := util.ConcatSlices(
service.EndpointsFromAddrs(service.HTTPProtocol, cfg.Ports.HTTP),
service.EndpointsFromAddrs(service.HTTPSProtocol, cfg.Ports.HTTPS),
@ -36,7 +35,7 @@ func newHTTPMiscService(cfg *config.Config, openAPIImpl api.StrictServerInterfac
Endpoints: endpoints,
},
Mux: createHTTPRouter(cfg, openAPIImpl),
Mux: createHTTPRouter(cfg),
},
}
}

View File

@ -22,6 +22,7 @@ import (
"strings"
"time"
"github.com/0xERR0R/blocky/api"
"github.com/0xERR0R/blocky/config"
"github.com/0xERR0R/blocky/log"
"github.com/0xERR0R/blocky/metrics"
@ -188,8 +189,9 @@ func (s *Server) createServices() ([]service.Service, error) {
}
res := []service.Service{
newHTTPMiscService(s.cfg, openAPIImpl),
newHTTPMiscService(s.cfg),
newDoHService(s.cfg.Services.DoH, s.handleReq),
api.NewService(s.cfg.Services.API, openAPIImpl),
metrics.NewService(s.cfg.Services.Metrics, s.cfg.Prometheus),
}

View File

@ -60,11 +60,9 @@ func (s *Server) Query(
return s.resolve(ctx, req)
}
func createHTTPRouter(cfg *config.Config, openAPIImpl api.StrictServerInterface) *chi.Mux {
func createHTTPRouter(cfg *config.Config) *chi.Mux {
router := chi.NewRouter()
api.RegisterOpenAPIEndpoints(router, openAPIImpl)
configureDebugHandler(router)
configureDocsHandler(router)