Claude-skill-registry api-endpoint-pattern

Standards for creating and organizing HTTP API endpoints using the Echo framework

install
source · Clone the upstream repo
git clone https://github.com/majiayu000/claude-skill-registry
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/api-endpoint-pattern" ~/.claude/skills/majiayu000-claude-skill-registry-api-endpoint-pattern && rm -rf "$T"
manifest: skills/data/api-endpoint-pattern/SKILL.md
source content

API Endpoint Pattern Skill

Use this skill when adding or modifying HTTP endpoints in the API.


Scope

  • Creating new API endpoints
  • Adding new domain routers
  • Modifying handler logic

Router Structure

Main Router (
internal/router/router.go
)

Initializes Echo, sets up middleware, and groups routes by domain.

Sub-Routers (
internal/router/[domain]/router.go
)

Each domain has its own sub-router with a

Bind
function that receives an
*echo.Group
and dependencies.

func Bind(e *echo.Group, db *sql.DB) *echo.Group {
    e.GET("/list", func(c echo.Context) error {
        // handler logic
    })
    return e
}

Adding a New Endpoint

  1. If introducing a new domain, create
    internal/router/[domain]/router.go
    .
  2. Implement a
    Bind(e *echo.Group, db *sql.DB) *echo.Group
    function.
  3. Register the sub-router in
    internal/router/router.go
    :
    domainrouter.Bind(api.Group("/domain"), config.DB.Conn)
    
  4. Implement data access logic in
    internal/models/
    if needed.

Handler Guidelines

  • Parameter Parsing: Use helper functions for complex query params (e.g., trader levels).
  • Dependency Injection: Pass
    *sql.DB
    into
    Bind
    , then into handlers. Avoid globals.
  • Response Handling:
    • Success:
      c.JSON(200, data)
      or
      c.String(200, "OK")
    • Error:
      c.String(code, err.Error())
      — log significant errors with zerolog.
  • Business Logic: Keep handlers thin. Move complex logic to
    internal/models/
    or other internal packages.

Conventions

  • Use
    e.Group()
    for logical route separation.
  • Use plural names for collections (
    /items
    ,
    /weapons
    ).
  • Use query parameters for filtering and optional configuration.
  • Prefer HTTP status constants for consistency, but be consistent either way.