Servidor web
O pacote restserver expõe contratos próprios sobre Fiber. A aplicação registra as rotas antes de chamar ListenAndServe().
Registrar uma rota
var routes = []restserver.Route{
{
URI: "users/:id",
Method: http.MethodGet,
Prefix: restserver.PublicApi,
Function: func(ctx restserver.WebContext) {
id := ctx.PathParam("id")
ctx.JsonResponse(http.StatusOK, map[string]string{"id": id})
},
},
}
func main() {
colibri.InitializeApp()
restserver.AddRoutes(routes)
restserver.ListenAndServe()
}
Essa rota responde em GET /public/users/:id.
Prefixos
| Constante | Prefixo | Autenticação padrão |
|---|---|---|
restserver.NoPrefix | / | Não |
restserver.PublicApi | /public/ | Não |
restserver.PrivateApi | /private/ | Não |
restserver.AuthenticatedApi | /api/ | Sim |
Rotas autenticadas exigem X-Tenant-Id e X-User-Id por padrão. Para validar outro tipo de credencial, registre um middleware de autenticação personalizado.
Contexto da requisição
restserver.WebContext fornece:
Context()eAuthenticationContext();PathParam,QueryParam,QueryArrayParameDecodeQueryParams;DecodeBody,DecodeFormData,FormFileeFormValue;RequestHeadereRequestHeaders;JsonResponse,ErrorResponse,EmptyResponse,RedirecteServeFile.
Sempre propague ctx.Context() para casos de uso, banco, clientes e mensageria.
Middleware por rota
func requireAdmin(ctx restserver.WebContext) *restserver.MiddlewareError {
profiles := ctx.RequestHeader("X-Profile")
if len(profiles) == 0 || profiles[0] != "admin" {
return restserver.NewMiddlewareError(
http.StatusForbidden,
errors.New("admin profile required"),
)
}
return nil
}
Associe-o com BeforeEnter: requireAdmin.
Middleware global
type requestMiddleware struct{}
func (requestMiddleware) Apply(ctx restserver.WebContext) *restserver.MiddlewareError {
return nil
}
restserver.Use(requestMiddleware{})
Registre middlewares antes de ListenAndServe().
CORS
| Variável | Padrão |
|---|---|
CORS_ALLOW_ORIGINS | * |
CORS_ALLOW_METHODS | OPTIONS, GET, POST, PUT, PATCH, DELETE |
CORS_ALLOW_HEADERS | Origin, Content-Type, Authorization, X-User-Id, X-Tenant-Id |
CORS_EXPOSE_HEADERS | vazio |
CORS_ALLOW_CREDENTIALS | false |
CORS_MAX_AGE | 0 |
aviso
Não combine CORS_ALLOW_ORIGINS=* com credenciais em produção. Liste explicitamente as origens permitidas.
Rotas internas
ListenAndServe() registra:
GET /health, que responde{"status":"OK"};GET /api-docs, que serve./docs/swagger.json.