strv backend go net
v0.8.0
빠르고 쉬운 방식으로 API 애플리케이션 작성을 용이하게하는 패키지가 있습니다.
일반적인 오류의 정의.
중고 API 아키텍처에 관계없이 유용한 일반적인 기능. net 현재 일부 도우미 방법으로 요청 ID 생성을 지원합니다.
Go Native HTTP 서버 주변의 래퍼. http ServerConfig 에서 구성 할 수있는 Server 를 정의합니다. 구현 된 기능 :
Run 메소드에 의해 전달되는 컨텍스트를 취소하여 쉽게 중지 할 수 있습니다.Server 구성 할 수 있습니다.Server SIGINT 및 SIGTERM SIGNALS에 대해 듣고 신호를 발사하여 중지 할 수 있습니다.ServerConfig 에 의해 Server 종료되기 전에 호출 할 함수를 구성 할 수 있습니다. http
RequestIDMiddleware 컨텍스트에 요청 ID를 설정합니다.RecoverMiddleware 공황에서 회복하여 공황 대상을 로깅을 위해 응답 작성자로 설정합니다.LoggingMiddleware Logs 요청에 대한 정보 (메소드, 경로, 상태 코드, 요청 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 )
}