strv backend go net
v0.8.0
GO包裝以快速簡便的方式促進編寫API應用程序。
常見錯誤的定義。
無論使用的API架構如何,都可以用方便地進行通用功能。 net當前支持使用一些輔助方法生成請求ID。
圍繞GO本機HTTP服務器包裝。 http定義了可以由ServerConfig配置的Server 。實施功能:
Run方法傳遞的上下文來輕鬆停止。Server可以配置使用slog.logger,以在服務器的啟動/結束期間記錄重要信息。Server聽SIGINT和SIGTERM信號,因此可以通過啟動信號來停止它。ServerConfig配置Server結束之前要調用的函數。 http定義了幾個輔助輔導結構:
RequestIDMiddleware將請求ID設置在上下文中。RecoverMiddleware從恐慌中恢復,並將恐慌對象設置為響應作者進行記錄。LoggingMiddleware日誌有關請求的信息(方法,路徑,狀態代碼,請求ID,請求的持續時間,錯誤消息和恐慌消息)。WriteErrorResponse錯誤HTTP響應的方法WriteResponse 。響應的撰寫可以通過ResponseOption進行配置。 啟動服務器:
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 ))
}
}編寫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 )
}