Resilient HTTP client with circuit breaking, exponential-backoff retry, X-Request-ID propagation, and a generic typed JSON helper. What's included: - Client interface with Do(req) method; New(logger, cfg) and NewWithDefaults(logger) constructors - Config struct with env-tag support for timeout, dial timeout, retry, and circuit breaker parameters - Retry via avast/retry-go/v4 with BackOffDelay; triggers only on network errors and HTTP 5xx - Circuit breaker via sony/gobreaker wrapping the full retry loop; open circuit → xerrors.ErrUnavailable - X-Request-ID header propagated automatically from context via logz.GetRequestID on every attempt - DoJSON[T](ctx, client, req) generic helper for typed JSON request/response with xerrors error mapping - MapStatusToError(code, msg) exported function mapping HTTP status codes to xerrors types Tested-via: todo-api POC integration Reviewed-against: docs/adr/
26 lines
622 B
JSON
26 lines
622 B
JSON
{
|
|
"name": "Go",
|
|
"image": "mcr.microsoft.com/devcontainers/go:2-1.25-trixie",
|
|
"features": {
|
|
"ghcr.io/devcontainers-extra/features/claude-code:1": {}
|
|
},
|
|
"forwardPorts": [],
|
|
"postCreateCommand": "go version",
|
|
"customizations": {
|
|
"vscode": {
|
|
"settings": {
|
|
"files.autoSave": "afterDelay",
|
|
"files.autoSaveDelay": 1000,
|
|
"explorer.compactFolders": false,
|
|
"explorer.showEmptyFolders": true
|
|
},
|
|
"extensions": [
|
|
"golang.go",
|
|
"eamodio.golang-postfix-completion",
|
|
"quicktype.quicktype",
|
|
"usernamehw.errorlens"
|
|
]
|
|
}
|
|
},
|
|
"remoteUser": "vscode"
|
|
} |