Pular para o conteúdo principal
Versão: v0.2.2

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

ConstantePrefixoAutenticaçã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() e AuthenticationContext();
  • PathParam, QueryParam, QueryArrayParam e DecodeQueryParams;
  • DecodeBody, DecodeFormData, FormFile e FormValue;
  • RequestHeader e RequestHeaders;
  • JsonResponse, ErrorResponse, EmptyResponse, Redirect e ServeFile.

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ávelPadrão
CORS_ALLOW_ORIGINS*
CORS_ALLOW_METHODSOPTIONS, GET, POST, PUT, PATCH, DELETE
CORS_ALLOW_HEADERSOrigin, Content-Type, Authorization, X-User-Id, X-Tenant-Id
CORS_EXPOSE_HEADERSvazio
CORS_ALLOW_CREDENTIALSfalse
CORS_MAX_AGE0
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.