strv backend go net
v0.8.0
GO Package Faciliter les applications d'API d'écriture d'une manière rapide et facile.
Définition des erreurs courantes.
Fonctionnalité commune qui est utile quelle que soit l'architecture API utilisée. net prend actuellement en charge les ID de demande de génération avec certaines méthodes d'assistance.
Encournant le serveur HTTP natif Go. http définit le Server qui peut être configuré par le ServerConfig . Fonctionnalités implémentées:
Run .Server peut être configuré avec un slog.logger pour enregistrer des informations importantes pendant le démarrage / la fin du serveur.Server écoute les signaux SIGINT et SIGTERM afin qu'il puisse être arrêté en licenciant le signal.ServerConfig peut être configuré des fonctions à appeler avant la fin Server . http définit plusieurs constructures d'assistance:
RequestIDMiddleware définit l'ID de demande dans le contexte.RecoverMiddleware se rétablit à partir de la panique et définit l'objet Panic dans l'écrivain de réponse pour la journalisation.LoggingMiddleware Logs Informations sur la demande (méthode, chemin, code d'état, ID de demande, durée de la demande, message d'erreur et message de panique).WriteResponse pour avoir rédigé une réponse HTTP et WriteErrorResponse pour écrire une réponse HTTP d'erreur. L'écriture des réponses peut être configurée par ResponseOption . Démarrage du serveur:
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 ))
}
}Écriture de réponses 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 )
}