strv backend go net
v0.8.0
GO Package تسهيل كتابة تطبيقات API بطريقة سريعة وسهلة.
تعريف الأخطاء الشائعة.
الوظائف الشائعة التي تأتي في متناول يدي بغنى بنية API المستخدمة. net يدعم حاليًا إنشاء معرفات الطلب مع بعض أساليب المساعد.
غلاف حول خادم HTTP الأصلي GO. يحدد http Server الذي يمكن تكوينه بواسطة ServerConfig . الميزات المنفذة:
Run .Server باستخدام slog.logger لتسجيل معلومات مهمة أثناء بدء/إنهاء الخادم.Server لإشارات SIGINT و SIGTERM بحيث يمكن إيقافها عن طريق إطلاق الإشارة.ServerConfig يمكن تكوين وظائف ليتم استدعاؤها قبل انتهاء Server . يحدد http العديد من الضمير المساعد:
RequestIDMiddleware بتعيين معرف الطلب في السياق.RecoverMiddleware من الذعر ويضع كائن الذعر في كاتب الاستجابة لتسجيله.LoggingMiddleware في سجلات السجلات حول الطلب (الطريقة ، المسار ، رمز الحالة ، معرف الطلب ، مدة الطلب ، رسالة الخطأ ورسالة الذعر).WriteResponse لكتابة استجابة HTTP والاستجابة WriteErrorResponse لكتابة استجابة HTTP خطأ. يمكن تكوين كتابة الردود عن طريق 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 )
}