ãšã¯ã¹ããŒããããGoããã¯ãšã³ããå®å šãªã«ã¹ã¿ã ããã«ãŠã§ã¢ã§æ¡åŒµãã
ãšã¯ã¹ããŒãããGoããã¯ãšã³ããæ¹å€ãç¶ããããããã«ããæ¹æ³: ã«ã¹ã¿ã ã³ãŒãã®çœ®ãå Žæãããã«ãŠã§ã¢ããšã³ããã€ã³ãã®è¿œå æ¹æ³ãã¢ããã°ã¬ãŒãã®èšç»ã«ã€ããŠã

ã«ã¹ã¿ãã€ãºãããšã¯ã¹ããŒãæžã¿ã³ãŒãã§äœããŸãããªãã
ãšã¯ã¹ããŒããããã³ãŒãã¯ææžãã®Goãªããžããªãšã¯åãã§ã¯ãããŸãããAppMasterã®ãããªãã©ãããã©ãŒã ã§ã¯ãããã¯ãšã³ãã¯ããžã¥ã¢ã«ã¢ãã«ïŒããŒã¿ã¹ããŒããããžãã¹ããã»ã¹ãAPIèšå®ïŒããçæãããŸããåãšã¯ã¹ããŒããããšãçæåšãã¢ãã«ã«åãããŠã³ãŒãã®å€§éšåãæžãçŽãããšããããŸããããã¯ã³ãŒãããããã«ä¿ã€ã«ã¯è¯ãã®ã§ãããã«ã¹ã¿ãã€ãºã®æ¹æ³ã«åœ±é¿ããŸãã
æããããã倱æã¯ãçæããããã¡ã€ã«ãçŽæ¥ç·šéããããšã§ããäžåºŠã¯ããŸããã£ãŠããæ¬¡ã®ãšã¯ã¹ããŒãã§äžæžãããããé¢åãªããŒãžè¡çªãèµ·ããŸããããã«æªãããšã«ãå°ããªæåç·šéãçæåšã®ä»®å®ïŒã«ãŒãã£ã³ã°é åºãããã«ãŠã§ã¢ãã§ãŒã³ããªã¯ãšã¹ãæ€èšŒïŒãå£ãããšãããåŸãŸããã¢ããªã¯ãã«ãã§ããŠããæåãå€ããããšããããŸãã
å®å šãªã«ã¹ã¿ãã€ãºãšã¯ã倿Žãç¹°ãè¿ãå¯èœã§ã¬ãã¥ãŒããããããšãæå³ããŸããããã¯ãšã³ããåãšã¯ã¹ããŒãããŠã«ã¹ã¿ã å±€ãé©çšããäœãå€ãã£ãããã¯ã£ããèŠãããšãã§ããã°è¯ãç¶æ ã§ããã¢ããã°ã¬ãŒããæ¯åèå€åŠã®ããã«æãããããªããããã¯åé¡ã§ãã
誀ã£ãå Žæã§ã«ã¹ã¿ãã€ãºãããšé垞次ã®ãããªåé¡ãèµ·ããŸã:
- åãšã¯ã¹ããŒãåŸã«ç·šéãæ¶ããããè¡çªã®è§£æ±ºã«äœæéãè²»ããã
- ã«ãŒãããããŠããã«ãŠã§ã¢ãæåŸ ããå Žæã§å®è¡ãããªããªãã
- ããžãã¯ãããŒã³ãŒãã¢ãã«ãšGoã³ãŒãã§éè€ããä¹é¢ããŠããã
- ãäžè¡ã®å€æŽãããã©ãŒã¯ã«ãªãã誰ãè§Šãããããªããªãã
ç°¡åãªã«ãŒã«ã倿Žã®çœ®ãå Žæã倿ããå©ãã«ãªããŸãããã倿Žãééçºè ã§ã調æŽãã¹ãããžãã¹æåïŒãã£ãŒã«ããããªããŒã·ã§ã³ãã¯ãŒã¯ãããŒãæš©éïŒã«å±ãããªãããããããŒã³ãŒãã¢ãã«ã«çœ®ããŠãã ãããã€ã³ãã©çãªæåïŒã«ã¹ã¿ã èªèšŒçµ±åããªã¯ãšã¹ããã°ãç¹å¥ãªããããã¬ãŒãå¶éïŒã¯åãšã¯ã¹ããŒãã«èããã«ã¹ã¿ã Goã¬ã€ã€ãŒã«çœ®ããŸãã
äŸ: ãã¹ãŠã®ãªã¯ãšã¹ãã«å¯Ÿããç£æ»ãã°ã¯éåžžããã«ãŠã§ã¢ïŒã«ã¹ã¿ã ã³ãŒãïŒã§ããæ³šæã®æ°ããå¿ é ãã£ãŒã«ãã¯éåžžããŒã¿ã¢ãã«ïŒããŒã³ãŒãïŒã§ãããã®åé¢ãæç¢ºã«ããŠããã°ãã¢ããã°ã¬ãŒãã¯äºæž¬å¯èœã«ãªããŸãã
ã³ãŒãããŒã¹ã®å°å³ãäœã: çæéšåãšèªåã®éšå
ãšã¯ã¹ããŒããããããã¯ãšã³ããæ¡åŒµããåã«ãåãšã¯ã¹ããŒãã§äœãåçæãããããäœãèªåãã¡ãææãããã20åã»ã©ã§ãããã³ã°ããŠãã ããããã®å°å³ãã¢ããã°ã¬ãŒããéå±ã«ä¿ã¡ãŸãã
çæã³ãŒãã¯ãããŠãèªãã瀺ãæããããæã£ãŠããŸã: ãCode generatedãããDO NOT EDITããšãã£ããããã³ã¡ã³ããäžå®ã®åœåãã¿ãŒã³ãäººãæžããã³ã¡ã³ããã»ãšãã©ãªãéåžžã«åäžãªæ§é ãªã©ã§ãã
å®åçã«ã¯ãªããžããªã次ã®3ã€ã®ãã±ããã«åããŠãã ãã:
- çæïŒèªã¿åãå°çšïŒ: çæåšããŒã«ãŒããããã¡ã€ã«ãç¹°ãè¿ããã¿ãŒã³ããã¬ãŒã ã¯ãŒã¯ã®éªšçµã¿ã«èŠãããã©ã«ãã
- ããªããææãããã®: ããªããäœæããããã±ãŒãžãã©ãããŒãå¶åŸ¡ããèšå®ã
- å ±æã®ç¶ãç®: ç»é²çšã®é ç·ãã€ã³ãïŒã«ãŒããããã«ãŠã§ã¢ãããã¯ïŒã§ãå°ããªç·šéã¯å¿ èŠã ãæå°éã«ããã¹ãå Žæã
æåã®ãã±ããã¯æè¡çã«ã¯ç·šéã§ããŠãèªã¿åãå°çšãšããŠæ±ã£ãŠãã ãããç·šéãããšçæåšãåŸã§äžæžãããããããŒãžã®è² æ ãæ°žé ã«æ±ããããšã«ãªããŸãã
ããŒã ã®ããã«å¢çãæç€ºããçãã¡ã¢ããªããžããªã«æžããŠãããŸãããïŒäŸ: ã«ãŒãã®READMEïŒãç°¡æœã«:
"Generator-owned files: anything with a DO NOT EDIT header and folders X/Y. Our code lives under internal/custom (or similar). Only touch wiring points A/B, and keep changes there small. Any wiring edit needs a comment explaining why it can't live in our own package."
ãã®äžæãããã ãã§ã軜ãä¿®æ£ãæ°žä¹ çãªã¢ããã°ã¬ãŒãã®çã¿ã«å€ããã®ãé²ããŸãã
ã¢ããã°ã¬ãŒããç°¡åã«ä¿ã€ããã®ã«ã¹ã¿ã ã³ãŒãã®çœ®ãå Žæ
æãå®å šãªã«ãŒã«ã¯ã·ã³ãã«ã§ã: ãšã¯ã¹ããŒããããã³ãŒããèªã¿åãå°çšãšã¿ãªãã倿Žã¯æç¢ºã«ææãããã«ã¹ã¿ã é åã«çœ®ãããšãåŸã§åãšã¯ã¹ããŒããããšãïŒäŸãã°AppMasterããïŒãããŒãžããçæã³ãŒãã眮ãæããã«ã¹ã¿ã ã³ãŒããä¿æãããã«ãªã£ãŠãããšçæ³çã§ãã
远å ã®ããã®å¥ããã±ãŒãžãäœæããŠãã ããããªããžããªå ã«çœ®ããŠããã§ãããçæãããããã±ãŒãžãšæ··ããªãã§ãã ãããçæã³ãŒããã³ã¢ã¢ããªãåãããããªãã®ããã±ãŒãžã¯ããã«ãŠã§ã¢ãã«ãŒãããã«ããŒã远å ããŸãã
å®çšçãªã¬ã€ã¢ãŠãäŸ:
internal/custom/ã«ããã«ãŠã§ã¢ããã³ãã©ãå°ããªãã«ããŒã眮ãinternal/custom/routes.goã§ã«ã¹ã¿ã ã«ãŒããäžç®æã§ç»é²ããinternal/custom/middleware/ã«ãªã¯ãšã¹ã/ã¬ã¹ãã³ã¹ããžãã¯ã眮ãinternal/custom/README.mdã«å°æ¥ã®ç·šéã«ãŒã«ãèšèŒãã
ãµãŒãã®é
ç·ã5ãæã§ç·šéããã®ã¯é¿ããŠãã ãããèããããã¯ãã€ã³ãããäžã€ã«ããŠããã«ãŠã§ã¢ãã¢ã¿ãããã远å ã«ãŒããç»é²ããããšãç®æšã«ããŠãã ãããçæããããµãŒããã«ãŒã¿ãŒããã³ãã©ãã§ãŒã³ãå
¬éããŠããã°ãããã§å·®ã蟌ãã§ãã ãããå
¬éãããŠããªããã°ããšã³ããªãã€ã³ãè¿ãã« custom.Register(router) ã®ãããªåäžã®çµ±åãã¡ã€ã«ã远å ããŸãã
ã«ã¹ã¿ã ã³ãŒãã¯ãææ¥æ°ãããšã¯ã¹ããŒãã«å ¥ããŠãåé¡ãªãããã«æžããŠãã ãããäŸåé¢ä¿ã¯æå°éã«ä¿ã¡ãçæåãã³ããŒãã代ããã«å°ããªã¢ããã¿ã䜿ããªã©ããŸãããã
ã¹ããããã€ã¹ããã: å®å šã«ã«ã¹ã¿ã ããã«ãŠã§ã¢ã远å ãã
ç®çã¯ããžãã¯ãèªåã®ããã±ãŒãžã«çœ®ããçæã³ãŒãã¯é ç·ã®1ãæã ãè§Šãããšã«ãããŸãã
ãŸããããã«ãŠã§ã¢ã¯çãä¿ã£ãŠãã ãã: ãªã¯ãšã¹ããã°ãç°¡åãªèªèšŒãã§ãã¯ãã¬ãŒãå¶éããªã¯ãšã¹ãIDãªã©ã§ããäžã€ã®ä»äºãããããšãããšåŸã§å€ãã®ãã¡ã€ã«ã倿Žãã矜ç®ã«ãªããŸãã
å°ããªããã±ãŒãžïŒäŸ: internal/custom/middlewareïŒãäœããã¢ããªå
šäœãç¥ãå¿
èŠããªãããã«ããŸããå
¬éã€ã³ã¿ãŒãã§ãŒã¹ã¯å°ãã: æšæºçãªGoã®ãã³ãã©ã©ãããŒãè¿ãã³ã³ã¹ãã©ã¯ã¿ã ãã«ããŸãã
package middleware
import "net/http"
func RequestID(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
// Add header, log, or attach to context here.
next.ServeHTTP(w, r)
})
}
次ã«çµ±åãã€ã³ããäžã€éžã³ãŸã: ã«ãŒã¿ãŒãHTTPãµãŒããäœãããå Žæã§ããããã«ããã«ãŠã§ã¢ãäžåºŠã ãç»é²ããåã ã®ã«ãŒãã«æ£ãã°ã£ãŠå€æŽãå ããã®ã¯é¿ããŠãã ããã
æ€èšŒã«ãŒãã¯çãä¿ã¡ãŸã:
httptestã䜿ã£ãŠäžã€ã®çµæïŒã¹ããŒã¿ã¹ã³ãŒãããããïŒã確èªãããã©ãŒã«ã¹ãããã¹ãã远å ããã- æåã§äžåºŠãªã¯ãšã¹ããéãåäœã確èªããã
- ããã«ãŠã§ã¢ããšã©ãŒæã«ãé©åã«æ¯ãèãããšã確èªããã
- ç»é²è¡ã®è¿ãã«ããã®çç±ãçãã³ã¡ã³ãã§æ®ãã
å°ããªå·®åãäžã€ã®é ç·ãã€ã³ããç°¡åãªåãšã¯ã¹ããŒãã
ã¹ããããã€ã¹ããã: ãã¹ãŠããã©ãŒã¯ããã«æ°ãããšã³ããã€ã³ãã远å ãã
çææžã¿ã³ãŒãã¯èªã¿åãå°çšãšããŠæ±ãããšã³ããã€ã³ãã¯ã¢ããªãã€ã³ããŒãããå°ããªã«ã¹ã¿ã ããã±ãŒãžã«è¿œå ããŠãã ããããããã¢ããã°ã¬ãŒããçŸå®çã«ä¿ã€æ¹æ³ã§ãã
ã³ãŒãã«è§Šãåã«å¥çŽãæžãåºããŠãã ããããšã³ããã€ã³ãã¯äœãåãåãïŒã¯ãšãªãJSONããã£ããããïŒãäœãè¿ããïŒJSONã®åœ¢ïŒãã¹ããŒã¿ã¹ã³ãŒããäºåã«æ±ºããŠãããšãåãããã®ãè¿ããæåã«ãªããŸããã
ã«ã¹ã¿ã ããã±ãŒãžã«ãã³ãã©ãäœããŸããéå±ã«ä¿ã£ãŠãã ãã: å ¥åãèªã¿ãæ€èšŒããæ¢åã®ãµãŒãã¹ãDBãã«ããŒãåŒã³åºããã¬ã¹ãã³ã¹ãè¿ãã
ã«ãŒãã®ç»é²ã¯ããã«ãŠã§ã¢ãšåãåäžã®çµ±åãã€ã³ãã§è¡ããçææžã¿ã®ãã³ãã©ãã¡ã€ã«å ã§ç»é²ããªãã§ãã ãããçæãããžã§ã¯ãããŠãŒã¶ãŒããã¯ãã«ã¹ã¿ã ç»é²ããµããŒãããŠããã°ãããã䜿ã£ãŠãã ããã
çããã§ãã¯ãªã¹ãã§æåãäžè²«ãããŸã:
- å ¥åã¯æ©ãã«æ€èšŒããïŒå¿ é ãã£ãŒã«ãããã©ãŒããããæå°/æå€§ïŒã
- ãšã©ãŒã¯äžã€ã®åœ¢ã«æããïŒmessage, code, detailsïŒã
- DBããããã¯ãŒã¯åŒã³åºãã§è¿·åã«ãªãããäœæ¥ã«ã¯ã³ã³ããã¹ãã®ã¿ã€ã ã¢ãŠãã䜿ãã
- äºæããªããšã©ãŒã¯äžåºŠã ããã°ã«åºããã¯ãªãŒã³ãª500ãè¿ãã
- æ°ããã«ãŒãã«å¯Ÿããå°ããªãã¹ãã远å ããã¹ããŒã¿ã¹ãšJSONã確èªããã
ãŸããã«ãŒã¿ãŒããšã³ããã€ã³ããäžåºŠã ãç»é²ããŠããããšã確èªããŠãã ãããéè€ç»é²ã¯ããŒãžåŸã®ããããçœ ã§ãã
倿Žãå°ããä¿ã€çµ±åãã¿ãŒã³
çææžã¿ããã¯ãšã³ããäŸåé¢ä¿ã®ããã«æ±ã£ãŠãã ãããåæãåªå ããã³ã¢ããžãã¯ãç·šéããã«åšèŸºã§æ©èœãé ç·ããŸãã
èšå®ãšåæãåªå ãã
ã³ãŒããæžãåã«ãèšå®ãããã¯ãæ¢åã®åæã§æåã远å ã§ããªãã確èªããŠãã ãããããã«ãŠã§ã¢ã¯è¯ãäŸã§ã: ãšããžïŒã«ãŒã¿ãŒ/HTTPã¹ã¿ãã¯ïŒã§è¿œå ããã°ãããžãã¹ããžãã¯ã«è§Šããã«é åºãå€ãããå€ãããã§ããŸãã
ã¬ãŒãå¶éãç£æ»ãã°ããªã¯ãšã¹ãIDã®ãããªæ¯ãèãã¯èªåã®ããã±ãŒãžã«çœ®ããåäžã®çµ±åãã¡ã€ã«ããç»é²ããŠãã ãããã¬ãã¥ãŒã§ã¯ãäžã€ã®æ°ããããã±ãŒãžãäžã€ã®ç»é²ãã€ã³ãããšèª¬æã§ããã¹ãã§ãã
ã¢ããã¿ã䜿ã£ãŠçæåã®æŒåºãé¿ãã
çæãããã¢ãã«ãDTOã¯ãšã¯ã¹ããŒãããšã«å€ããããšããããŸããã¢ããã°ã¬ãŒãçãæžããããã«å¢çã§å€æããŠãã ãã:
- çæããããªã¯ãšã¹ãåãèªåã®å éšæ§é ã«å€æããã
- ãã¡ã€ã³ããžãã¯ã¯èªåã®æ§é ã§åããã
- çµæãçææžã¿ã®ã¬ã¹ãã³ã¹ã¿ã€ãã«æ»ãã
ããããã°çæåããããŠãã³ã³ãã€ã©ãä¿®æ£ç®æãäžç®æã«æã瀺ããŸãã
æ¬åœã«çæã³ãŒãã«è§Šãå¿ èŠãããå Žåã§ããããã¯åäžã®ã¯ã€ã€ãªã³ã°ãã¡ã€ã«ã«éå®ããŠãã ãããå€ãã®çæãã³ãã©ã«ãŸãããç·šéã¯é¿ããŸãããã
// internal/integrations/http.go
func RegisterCustom(r *mux.Router) {
r.Use(RequestIDMiddleware)
r.Use(AuditLogMiddleware)
}
å®çšçãªã«ãŒã«: 倿Žã2ã3æã§èª¬æã§ããªããªããããã¯ãããã絡ã¿ãããŠããŸãã
æéçµéã§å·®åã管çããæ¹æ³
åãšã¯ã¹ããŒãã1é±éã®è¡çªã«å€ãããªãã®ãç®æšã§ããç·šéã¯å°ãããèŠã€ããããã説æãããããã®ã«ããŠãã ããã
æåããGitã䜿ããçæãããæŽæ°ãšã«ã¹ã¿ã äœæ¥ãåããŠãã ãããæ··ãããšåŸã§ãã°ã®åå ãçªãæ¢ããããŸããã
èªã¿ãããã³ãããã®ç¿æ £:
- ç®çããšã«1ã³ãããïŒããªã¯ãšã¹ãIDããã«ãŠã§ã¢ã远å ããªã©ïŒã
- ãã©ãŒãããã ãã®å€æŽãšããžãã¯å€æŽãæ··ããªãã
- åãšã¯ã¹ããŒãåŸã¯ããŸãçæãããæŽæ°ãã³ããããããã®åŸã«ã¹ã¿ã 調æŽãã³ãããããã
- è§Šã£ãããã±ãŒãžããã¡ã€ã«ãã¡ãã»ãŒãžã«å«ããã
CHANGELOG_CUSTOM.md ã®ãããªç°¡åãªã«ã¹ã¿ãã€ãºçšãã°ã«ãäœãã©ãã«çœ®ãããçç±ãšãšãã«æžããŠãããšäŸ¿å©ã§ããç¹ã«AppMasterã®ãšã¯ã¹ããŒãã§ã¯ãã©ãããã©ãŒã ãã³ãŒããå®å
šã«åçæã§ããã®ã§ãã©ããåé©çšã»åæ€èšŒãããã®å°å³ã欲ãããªããŸãã
å·®åãã€ãºãæžããããã«äžè²«ãããã©ãŒããããšãªã³ããŒã«ã䜿ã£ãŠãã ãããã³ãããããšã« gofmt ãå®è¡ããCIã§åããã§ãã¯ãèµ°ãããŸããçæã³ãŒããç¹å®ã®ã¹ã¿ã€ã«ã䜿ã£ãŠãããªããæã§ããããã«ãããããšã¯é¿ããŠãã ãããåãšã¯ã¹ããŒãããšã«åãæé€ãç¹°ãè¿ãããšã«ãªããŸãã
ããŒã ãæ¯ååãæåç·šéãç¹°ãè¿ããªãããããã¯ãŒã¯ãããŒãæ€èšããŠãã ãã: ãšã¯ã¹ããŒã -> ãããé©çšïŒãŸãã¯ã¹ã¯ãªããå®è¡ïŒ -> ãã¹ã -> ãããã€ã
ã¢ããã°ã¬ãŒããèšç»ãã: åãšã¯ã¹ããŒããããŒãžãæ€èšŒ
ããã¯ãšã³ãã¯åçæã§ãããã®ãšããŠæ±ããšã¢ããã°ã¬ãŒãã¯ç°¡åã§ããç®æšã¯äžè²«ããŠããŸã: ãããã«åãšã¯ã¹ããŒãããæ¯ååãçµ±åãã€ã³ãã§ã«ã¹ã¿ã æ¯ãèããåé©çšããããšã
ãªã¹ã¯èš±å®¹åºŠãšå€æŽé »åºŠã«åãããã¢ããã°ã¬ãŒãã®ãªãºã ãæ±ºããŠãã ãã:
- ã»ãã¥ãªãã£ä¿®æ£ãæ°æ©èœãæ©ãå¿ èŠãªãåãã©ãããã©ãŒã ãªãªãŒã¹ããš
- ã¢ããªãå®å®ããŠããã°ååæããš
- 倿Žãçšã§ããŒã ãå°ãããã°å¿ èŠæã®ã¿
ã¢ããã°ã¬ãŒãæã¯å¥ãã©ã³ãã§ãã©ã€ã©ã³ã®åãšã¯ã¹ããŒããè¡ãããŸãæ°ãããšã¯ã¹ããŒãã ãã§ãã«ãã»èµ·åããŠäœãå€ãã£ããã確èªããŸãã
ãã®åŸããã€ãã®ã·ãŒã ïŒããã«ãŠã§ã¢ç»é²ãã«ã¹ã¿ã ã«ãŒã¿ãŒã°ã«ãŒããã«ã¹ã¿ã ããã±ãŒãžïŒãéããŠã«ã¹ã¿ãã€ãºãåé©çšããŸããçæãã¡ã€ã«ã®äžã§çްããåãå»ããããªç·šéã¯é¿ããŠãã ãããã·ãŒã ã§è¡šçŸã§ããªã倿Žããããªããããã¯ãäžåºŠã ããæ°ããç¶ãç®ã远å ããåå³ã§ãã
çãååž°ãã§ãã¯ãªã¹ãã§æ€èšŒããŠãã ãã:
- èªèšŒãããŒïŒãã°ã€ã³ãããŒã¯ã³æŽæ°ããã°ã¢ãŠãïŒãåã
- éèŠãªAPIãšã³ããã€ã³ã3ã5åãåãã¹ããŒã¿ã¹ã³ãŒããšåœ¢ãè¿ã
- åãšã³ããã€ã³ãã®ã²ãšã€ã®äžæ£ç³»ïŒäžæ£å ¥åãèªèšŒãªãïŒã確èªãã
- ããã¯ã°ã©ãŠã³ããžã§ããã¹ã±ãžã¥ãŒã«ãããã¿ã¹ã¯ãåã
- ãããã€ç°å¢ã§ãã«ã¹/ã¬ãã£ãã¹ãOKãè¿ã
ç£æ»ãã°ã®ããã«ãŠã§ã¢ã远å ãããªããåãšã¯ã¹ããŒãåŸã«ç®¡çç³»ã®æžãèŸŒã¿æäœã§ãã°ã«ãŠãŒã¶ãŒIDãšã«ãŒãåãå«ãŸãããã確èªããŠãã ããã
ã¢ããã°ã¬ãŒããèŸãããäžè¬çãªãã¹
çæããããã¡ã€ã«ããä»åã¯ããã ãããšç·šéããã®ã次ã®åãšã¯ã¹ããŒããå°ç¡ãã«ããæéã®æ¹æ³ã§ããå°ããªãã°ä¿®æ£ãããããã§ãã¯ã®è¿œå ã¯ç¡å®³ã«èŠããŸãããæ°ãæåŸã«äœãããªãå€ãããã誰ãèŠããŠããªãããšããããŸãã
å¥ã®èœãšã穎ã¯ã«ã¹ã¿ã ã³ãŒãããã¡ãã¡ã«æ£ããããšã§ã: ããããã±ãŒãžã«ãã«ããŒãå¥ã«ã«ã¹ã¿ã èªèšŒãã§ãã¯ãã«ãŒãã£ã³ã°è¿ãã«ããã«ãŠã§ã¢èª¿æŽãã©ã³ãã ãªãã©ã«ãã«äžåºŠéãã®ãã³ãã©ãèª°ã®ææç©ã§ããªããªããããŒãžã¯çºæäœæ¥ã«ãªããŸãã倿Žã¯å°æ°ã®æçœãªå Žæã«ãŸãšããŠãã ããã
çæå éšãžã®å¯çµå
ã«ã¹ã¿ã ã³ãŒããçæãããå éšæ§é ããã©ã€ããŒããã£ãŒã«ããããã±ãŒãžã¬ã€ã¢ãŠãã«äŸåãããšãã¢ããã°ã¬ãŒãã¯èŸããªããŸããçæã³ãŒãã®å°ããªãªãã¡ã¯ã¿ã§ãã«ããå£ããããšããããŸãã
å®å šãªå¢ç:
- ã«ã¹ã¿ã ãšã³ããã€ã³ãã«ã¯èªåã§ç®¡çããDTOã䜿ãã
- çæã¬ã€ã€ãŒãšã¯ãšã¯ã¹ããŒããããã€ã³ã¿ãŒãã§ãŒã¹ã颿°ãéããŠããåããããå éšåãçŽæ¥è§Šããªãã
- ããã«ãŠã§ã¢ã®å€æã¯å¯èœãªéãHTTPã®åå§èŠçŽ ïŒããããã¡ãœããããã¹ïŒã«åºã¥ããã
æãå¿ èŠãªå Žæã§ãã¹ããçç¥ãã
ããã«ãŠã§ã¢ãã«ãŒãã£ã³ã°ã®ãã°ã¯ãã©ã³ãã ãª401ãããšã³ããã€ã³ããèŠã€ãããªããã®ããã«èŠããããæéãé£ããŸããããã€ãã®éäžãããã¹ãã§äœæéãç¯çŽã§ããŸãã
çŸå®çãªäŸ: ç£æ»ããã«ãŠã§ã¢ããã°ã®ããã«ãªã¯ãšã¹ãããã£ãèªã¿ããããåå ã§ãã³ãã©ã空ã®ããã£ãåãåãããã«ãªãããšããããŸããã«ãŒã¿ãŒãéããPOSTãéã£ãŠç£æ»ã®å¯äœçšãšãã³ãã©ã®æ¯ãèãã®äž¡æ¹ã確èªããå°ããªãã¹ããããã®ååž°ãæãŸããŸãã
ãªãªãŒã¹åã®ç°¡åãã§ãã¯ãªã¹ã
ã«ã¹ã¿ã 倿Žãåºè·ããåã«ã次ã®ããšã確èªããŠãã ãããæ¬¡ã®åãšã¯ã¹ããŒãæã«äœãåé©çšããããã©ãã«ããããã©ãæ€èšŒããããåããããã«ããŸãã
- ãã¹ãŠã®ã«ã¹ã¿ã ã³ãŒããäžã€ã®æç¢ºãªããã±ãŒãžããã©ã«ãïŒäŸ:
internal/custom/ïŒã«ãŸãšããã - çæãããé ç·ãšã®æ¥ç¹ã¯1ã2ãã¡ã€ã«ã«å¶éãããããããæ©ãšããŠæ±ã: ã«ãŒããäžåºŠç»é²ãããã«ãŠã§ã¢ãäžåºŠç»é²ã
- ããã«ãŠã§ã¢ã®é åºãšãã®çç±ãææžåããïŒäŸ: "Auth before rate limiting" ãšçç±ïŒã
- åã«ã¹ã¿ã ãšã³ããã€ã³ãã«æäœ1ã€ã®ãã¹ããçšæããã
- åçŸå¯èœãªã¢ããã°ã¬ãŒãæé ãæžããŠãã: åãšã¯ã¹ããŒã -> ã«ã¹ã¿ã å±€ãåé©çš -> ãã¹ãå®è¡ -> ãããã€ã
ãã1ã€ã ããããªããã¢ããã°ã¬ãŒãããŒããæžããŠãã ããã"倧äžå€«ã ãšæã" ã "ã¡ãããšåããšèšŒæã§ãã" ã«å€ããŸãã
äŸ: ç£æ»ãã°ãšãã«ã¹ãšã³ããã€ã³ãã远å ãã
äŸãã°AppMasterããGoããã¯ãšã³ãããšã¯ã¹ããŒããã(1) 管çæäœã®ããã®ãªã¯ãšã¹ãIDãšç£æ»ãã°ã(2) ç£èŠçšã® /health ãšã³ããã€ã³ãã远å ããããšããŸããç®æšã¯åãšã¯ã¹ããŒãåŸã«ç°¡åã«åé©çšã§ããããšã§ãã
ç£æ»ãã°ã¯ internal/custom/middleware/ ã®ãããªææå Žæã«ã³ãŒãã眮ããŸããããã«ãŠã§ã¢ã¯ (1) X-Request-Id ãèªããçæããã(2) ã³ã³ããã¹ãã«æ ŒçŽããã(3) 管çã«ãŒãã«å¯ŸããŠçãç£æ»ãã°è¡ïŒã¡ãœããããã¹ãå©çšå¯èœãªããŠãŒã¶ãŒIDãçµæïŒãåºãããšããã·ã³ãã«ãªãã®ã«ããŸãã1ãªã¯ãšã¹ãã«ã€ã1è¡ã«ãã巚倧ãªãã€ããŒãããã³ãããªãã§ãã ããã
ãããã«ãŒããç»é²ãããè¿ãã®ãšããžã§ã¯ã€ã€ãªã³ã°ããŸããçæãããã«ãŒã¿ãŒã«åäžã®ã»ããã¢ãããã¡ã€ã«ãããã°ãããã«å°ããªããã¯ã远å ããŠããã«ãŠã§ã¢ãadminã°ã«ãŒãã ãã«é©çšããŸãã
/health 㯠internal/custom/handlers/health.go ã«å°ããªãã³ãã©ã远å ã㊠200 OK ã ok ã®ãããªçãããã£ã§è¿ããŠãã ãããã¢ãã¿ãå¿
èŠãšããªãéãèªèšŒã¯è¿œå ããªãã§ãã ãããå¿
èŠãªãææžåããŸãã
倿Žãåé©çšããããããããã«ã³ãããã¯æ¬¡ã®ããã«æ§æããŸã:
- ã³ããã1:
internal/custom/middleware/audit.goãšãã¹ãã远å - ã³ããã2: ããã«ãŠã§ã¢ã管çã«ãŒãã«ã¯ã€ã€ãªã³ã°ïŒæå°ã®å·®åïŒ
- ã³ããã3:
internal/custom/handlers/health.goã远å ã/healthãç»é²
ã¢ããã°ã¬ãŒããåãšã¯ã¹ããŒãåŸã¯åºæ¬ã確èªããŸã: 管çã«ãŒãã¯åŒãç¶ãèªèšŒãèŠæ±ãããããªã¯ãšã¹ãIDã管çãã°ã«åºããã/health ãçŽ æ©ãå¿çããããè»œè² è·äžã§ããã«ãŠã§ã¢ãç®ç«ã£ãé
å»¶ã远å ããŠããªããã
次ã®ã¹ããã: ç¶æã§ããã«ã¹ã¿ãã€ãºã¯ãŒã¯ãããŒã決ãã
ãšã¯ã¹ããŒããæ¯ååçŸã§ãããã«ãã ãšèããŠãã ãããã«ã¹ã¿ã ã³ãŒãã¯ã¢ããªã³å±€ã®ããã«æããããæžãæãã§ã¯ãªãã¹ãã§ãã
次åãäœãã³ãŒãã«çœ®ãäœãããŒã³ãŒãã¢ãã«ã«çœ®ãããæ±ºããŠãã ãããããžãã¹ã«ãŒã«ãããŒã¿åœ¢ãæšæºçãªCRUDããžãã¯ã¯éåžžã¢ãã«åŽã«ãããã¯ã³ãªãã®çµ±åãäŒç€Ÿåºæã®ããã«ãŠã§ã¢ã¯ã«ã¹ã¿ã GoåŽã«çœ®ããŸãã
ããAppMasterïŒappmaster.ioïŒã䜿ã£ãŠãããªããçæãããGoããã¯ãšã³ãã®åšãã«ã¯ãªãŒã³ãªæ¡åŒµã¬ã€ã€ãŒãèšèšããŠãã ãã: ããã«ãŠã§ã¢ãã«ãŒãããã«ããŒãåãšã¯ã¹ããŒãéã§æã¡éã¹ãå°ããªãã©ã«ãéåã«ãŸãšããçæåšç®¡çã®ãã¡ã€ã«ã¯è§Šããªãããã«ããŸãã
å®çšçãªæçµãã§ãã¯: ããŒã ã¡ã³ããŒãåãšã¯ã¹ããŒãããŠããªãã®æé ãé©çšãã1æé以å ã«åãçµæãåŸããããªãããã®ã¯ãŒã¯ãããŒã¯ç¶æå¯èœã§ãã
ãããã質å
çæåšç®¡çã®ãã¡ã€ã«ãçŽæ¥ç·šéããªãã§ãã ããã倿Žã¯æç¢ºã«ææãããããã±ãŒãžïŒäŸ: internal/custom/ïŒã«çœ®ãããµãŒãèµ·åä»è¿ã®å°ããªçµ±åãã€ã³ãã§æ¥ç¶ããŠãã ãããããããã°åãšã¯ã¹ããŒãã§çæã³ãŒãã眮ãæãã£ãŠããã«ã¹ã¿ã ã¬ã€ã€ãŒã¯ãã®ãŸãŸæ®ããŸãã
ãCode generatedãããDO NOT EDITãã®ãããªã³ã¡ã³ããä»ãããã®ã¯æžãæãããããšèããŠãã ããããŸããéåžžã«åäžãªãã©ã«ãæ§æãç¹°ãè¿ãã®åœåãã»ãšãã©äººéã®ã³ã¡ã³ãããªãã³ãŒããçæåšã®æçŽã§ãããããã¯åäœããŠãèªã¿åãå°çšãšããŠæ±ãã®ãå®å šã§ãã
ã«ã¹ã¿ã ããã±ãŒãžãã€ã³ããŒãããŠãããã«ãŠã§ã¢ã远å ã«ãŒããªã©ãäžç®æã§ç»é²ããâå°ããªããã¯ãã¡ã€ã«âãçšæããããšã§ãã5ã€ã®ã«ãŒãã£ã³ã°ãã¡ã€ã«ãçææžã¿ã®è€æ°ãã³ãã©ãè§Šã£ãŠãããªããããã¯å°æ¥ã®ã¢ããã°ã¬ãŒãã§çãç®ã«ãããŸãã
ããã«ãŠã§ã¢ã¯èªåã®ããã±ãŒãžã«æžãããªã¯ãšã¹ãIDãç£æ»ãã°ãã¬ãŒãå¶éãç¹å¥ãªããããªã©äžã€ã®è²¬åã«çãä¿ã£ãŠãã ããããããŠã«ãŒã¿ãŒãHTTPã¹ã¿ãã¯ã®äœææã«äžåºŠã ãç»é²ããçææžã¿ãã³ãã©å
ã§åå¥ã«ç»é²ããªãã§ãã ãããhttptestã§æåŸ
ããããããã¹ããŒã¿ã¹ã³ãŒãã確èªããç°¡åãªãã¹ãããåãšã¯ã¹ããŒãåŸã®ååž°ãæãŸããŸãã
ãŸããšã³ããã€ã³ãã®å¥çŽã決ãããã³ãã©ã¯ã«ã¹ã¿ã ããã±ãŒãžã«å®è£ ããŠãããã«ãŠã§ã¢ãšåãçµ±åãã€ã³ãã§ã«ãŒããç»é²ããŠãã ãããå ¥åãæ€èšŒããæ¢åã®ãµãŒãã¹ãåŒã³åºããäžè²«ãããšã©ãŒåœ¢ãè¿ãããšã§ã倿Žãæ°ãããšã¯ã¹ããŒãã«ãç§»æ€ããããããŸãã
çæåšãã«ãŒãç»é²ã®é åºãã°ã«ãŒãã³ã°ãããã«ãŠã§ã¢ãã§ãŒã³ãå€ãããšé åºãå€ãããŸããä¿è·ããããã«å®å®ããç»é²ã·ãŒã ã«äŸåããç»é²è¡ã®ãã°ã«ããã«ãŠã§ã¢é åºãææžåããŠãã ããïŒäŸ: èªèšŒã¯ç£æ»ã®åïŒãé åºãéèŠãªãæå³çã«ã³ãŒãåããŠãå°ããªãã¹ãã§ç¢ºèªããŸãããã
åãã«ãŒã«ãäž¡æ¹ã«å®è£ ãããšæéãšãšãã«ä¹é¢ããŸããééçºè ã調æŽãã¹ãããžãã¹ã«ãŒã«ïŒãã£ãŒã«ããããªããŒã·ã§ã³ãã¯ãŒã¯ãããŒãæš©éïŒã¯ããŒã³ãŒãã¢ãã«ã«çœ®ãããã°ãèªèšŒçµ±åãã¬ãŒãå¶éãªã©ã€ã³ãã©çãªæžå¿µã¯ã«ã¹ã¿ã Goã¬ã€ã€ãŒã«çœ®ããŠãã ããããªããžããªãèŠãã°åå²ãæçœã«ãªãã¹ãã§ãã
çæãããDTOãå éšæ§é ã¯ãšã¯ã¹ããŒãããšã«å€ããããšãããã®ã§ããã®å·®åã¯å¢çã§åžåããŠãã ãããå ¥åãèªåã®å éšæ§é ã«å€æããŠããžãã¯ã¯ããã§åãããåºåããšããžã§çæåã«æ»ããšãåãå€ãã£ãŠãä¿®æ£ç®æã¯ã¢ããã¿1ç®æã«éãŸããŸãã
çæã®æŽæ°ãšã«ã¹ã¿ã äœæ¥ãåããŠæ±ããšãäœãå€ãã£ããã远ãããããªããŸããå®åçãªæµãã¯ããŸãåãšã¯ã¹ããŒãã§çæããã倿Žãã³ããããããã®åŸã§æå°éã®ã¯ã€ã€ãªã³ã°ãšã«ã¹ã¿ã 調æŽãã³ãããããããšã§ããçãã«ã¹ã¿ã çšã®å€æŽãã°ãæ®ããŠãããšæ¬¡åã®ã¢ããã°ã¬ãŒãããã£ãšéããªããŸãã
å¥ãã©ã³ãã§ãã©ã€ã©ã³ã®åãšã¯ã¹ããŒããè¡ããæ°ãããšã¯ã¹ããŒããããããŒãžã§ã³ã ãã§ãã«ãã»èµ·åããŠã©ããå€ãã£ãããææ¡ããŠãã ããããã®åŸããã€ãã®ã·ãŒã ãéããŠã«ã¹ã¿ãã€ãºãåé©çšããäž»èŠãªãšã³ããã€ã³ãã1ã€ã®äžæ£å ¥åçµè·¯ã§ç°¡åãªååž°ãã§ãã¯ãè¡ããŸããã·ãŒã ã§è¡šçŸã§ããªã倿Žãããã°ããŸã1åã ãæ°ããã·ãŒã ã远å ããŠä»¥éã¯ãããéãããã«ããŸãã


