strv backend go net
v0.8.0
Vaya al paquete facilitando la escritura de aplicaciones API de manera rápida y fácil.
Definición de errores comunes.
Funcionalidad común que es útil independientemente de la arquitectura API usada. net actualmente admite la generación de ID de solicitud con algunos métodos de ayuda.
Envuelve alrededor del servidor HTTP nativo de GO. http define el Server que puede configurar el ServerConfig . Características implementadas:
Run .Server se puede configurar con un slog.logger para registrar información importante durante el inicio/finalización del servidor.Server escucha las señales SIGINT y SIGTERM para que se pueda detener disparando la señal.ServerConfig se puede configurar las funciones que se llamarán antes de que finalice el Server . http define varias conscuciones de ayuda:
RequestIDMiddleware establece la ID de solicitud en el contexto.RecoverMiddleware se recupera del pánico y establece el objeto de pánico en el escritor de respuesta para el registro.LoggingMiddleware registra información sobre la solicitud (método, ruta, código de estado, ID de solicitud, duración de la solicitud, mensaje de error y mensaje de pánico).WriteResponse para escribir una respuesta HTTP y WriteErrorResponse para escribir una respuesta HTTP de error. La redacción de respuestas se puede configurar mediante ResponseOption . Iniciar el servidor:
package main
import (
...
httpx "go.strv.io/net/http"
)
func main () {
...
h := slog . NewJSONHandler ( os . Stderr , & slog. HandlerOptions {
Level : level ,
ReplaceAttr : func ( groups [] string , a slog. Attr ) slog. Attr {
if a . Key == slog . TimeKey {
a . Value = slog . StringValue ( a . Value . Time (). Format ( "2006-01-02T15:04:05.000Z" ))
}
return a
},
})
l := slog . New ( h )
serverConfig := httpx. ServerConfig {
Addr : ":8080" ,
Handler : handler (), // define your http handler
Hooks : httpx. ServerHooks {
BeforeShutdown : []httpx. ServerHookFunc {
func ( _ context. Context ) {
storage . Close () // it may be useful for example to close a storage before the server ends
},
},
},
Limits : nil ,
Logger : l . WithGroup ( "httpx.Server" ), // the server expects *slog.Logger
}
server := httpx . NewServer ( & serverConfig )
if err = server . Start ( ctx ); err != nil {
l . Error ( "HTTP server unexpectedly ended" , slog . Any ( "error" , err ))
}
}Escribir respuestas HTTP:
func ( h * Handler ) GetUser ( w http. ResponseWriter , r * http. Request ) {
userID := userIDFromCtx ( r . Context ())
user , err := h . service . GetUser ( r . Context (), userID )
if err != nil {
_ = httpx . WriteErrorResponse ( w , http . StatusInternalServerError , httpx . WithErrorCode ( "ERR_UNKNOWN" ))
return
}
userResp := model . ToUser ( user )
_ = httpx . WriteResponse ( w , userResp , http . StatusOK )
}