strv backend go net
v0.8.0
迅速かつ簡単な方法で、APIアプリケーションの書き込みを促進するパッケージに移動します。
共通エラーの定義。
使用されているAPIアーキテクチャに関係なく、役立つ一般的な機能。 net現在、いくつかのヘルパーメソッドを備えたリクエストIDの生成をサポートしています。
GOネイティブHTTPサーバーの周りのラッパー。 http 、 ServerConfigによって構成できるServerを定義します。実装された機能:
Run方法で渡されるコンテキストをキャンセルすることで簡単に停止できます。Server 、サーバーの開始/終了時に重要な情報を記録するためのslog.loggerで構成できます。Server 、 SIGINTとSIGTERM信号を聴き、信号を発射することで停止できます。ServerConfigによって、 Serverが終了する前に呼び出される機能を設定できます。 httpいくつかのヘルパーの意見を定義します:
RequestIDMiddleware 、コンテキストにリクエストIDを設定します。RecoverMiddlewareパニックから回復し、ロギングのためにパニックオブジェクトを応答ライターに設定します。LoggingMiddleware 、リクエストに関する情報を記録します(メソッド、パス、ステータスコード、リクエストID、リクエストの持続時間、エラーメッセージ、パニックメッセージ)。WriteResponseエラーHTTP応答を作成するためのWriteErrorResponse 。応答の執筆は、 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 )
}