Skip to content
Back to skills

Add Api Endpoint

ASecurity

Create API layer components for a new entity. Includes usecase interactors (internal/usecase/), proto definitions (schema/proto/), gRPC handlers (internal/infrastructure/grpc/), and DI registration. Use when adding CRUD endpoints or Step 3 of CRUD workflow (after add-domain-entity).

  • 666 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added September 2, 2026
ai-agentsgobashsqlapi

Works with

  • api

Security analysis

A100/100

Scanned September 2, 2026

npx -y skills add majiayu000/claude-skill-registry --skill add-api-endpoint --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Add Api Endpoint?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Add Api Endpoint
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/majiayu000-add-api-endpoint-claude-skill-registry/badge)](https://www.skillsdirectory.com/skills/majiayu000-add-api-endpoint-claude-skill-registry)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: add-api-endpoint
description: Create API layer components for a new entity. Includes usecase interactors (internal/usecase/), proto definitions (schema/proto/), gRPC handlers (internal/infrastructure/grpc/), and DI registration. Use when adding CRUD endpoints or Step 3 of CRUD workflow (after add-domain-entity).
---

# Add API Endpoint

Create complete API layer: usecase interactors, proto definitions, gRPC handlers, and DI registration.

## Prerequisites

- Domain entity created (use **add-domain-entity** skill first)
- Repository interface and implementation ready
- SQLBoiler models generated (`make migrate.up`)

## Workflow Overview

```
1. Usecase Input/Output  -->  internal/usecase/input/, output/
2. Interactor Interface  -->  internal/usecase/{actor}_{entity}.go
3. Interactor Impl       -->  internal/usecase/{actor}_{entity}_impl.go
4. Proto Definition      -->  schema/proto/rapid/{actor}_api/v1/
5. Generate Proto        -->  make generate.buf
6. Handler Marshaller    -->  handler/{actor}/marshaller/{entity}.go
7. Handler Methods       -->  handler/{actor}/{entity}.go
8. Update Handler Struct -->  handler/{actor}/handler.go
9. Register in DI        -->  dependency/dependency.go
10. Generate & Test      -->  make generate.mock && make test
```

## Step 1: Create Usecase Input/Output

Location: `internal/usecase/input/{actor}_{entity}.go`

Create input structs for each operation (Create, Get, List, Update, Delete).
Each struct needs a `Validate()` method.

See: [references/usecase-patterns.md](references/usecase-patterns.md#input-structs)

Location: `internal/usecase/output/{actor}_{entity}.go`

Create output struct only for List operations (returns slice + count).

See: [references/usecase-patterns.md](references/usecase-patterns.md#output-structs)

## Step 2: Create Interactor Interface

Location: `internal/usecase/{actor}_{entity}.go`

Define interface with `//go:generate` directive for mock generation.

See: [references/usecase-patterns.md](references/usecase-patterns.md#interactor-interface)

## Step 3: Implement Interactor

Location: `internal/usecase/{actor}_{entity}_impl.go`

Implement CRUD methods following transaction patterns:
- **Create**: Validate -> Create entity -> RWTx -> Get with Preload
- **Get**: Validate -> Get with Preload
- **List**: Validate -> List + Count with Preload
- **Update**: Validate -> RWTx(Get ForUpdate -> Update) -> Get with Preload
- **Delete**: Validate -> RWTx(Get ForUpdate -> Delete)

See: [references/usecase-patterns.md](references/usecase-patterns.md#interactor-implementation)

## Step 4: Define Protocol Buffers

Create two files:
- Model/Enum: `schema/proto/rapid/{actor}_api/v1/model_{entity}.proto`
- Request/Response: `schema/proto/rapid/{actor}_api/v1/api_{entity}.proto`

Then add RPCs to: `schema/proto/rapid/{actor}_api/v1/api.proto`

See: [references/proto-patterns.md](references/proto-patterns.md)

## Step 5: Generate Proto Code

```bash
make generate.buf
```

## Step 6: Create Handler Marshaller

Location: `internal/infrastructure/grpc/internal/handler/{actor}/marshaller/{entity}.go`

Convert between domain models and proto messages.

See: [references/handler-patterns.md](references/handler-patterns.md#marshaller)

## Step 7: Create Handler Methods

Location: `internal/infrastructure/grpc/internal/handler/{actor}/{entity}.go`

Implement gRPC handler methods that delegate to interactors.

See: [references/handler-patterns.md](references/handler-patterns.md#handler-methods)

## Step 8: Update Handler Struct

Location: `internal/infrastructure/grpc/internal/handler/{actor}/handler.go`

Add new interactor field and constructor parameter.

See: [references/handler-patterns.md](references/handler-patterns.md#handler-struct)

## Step 9: Register in DI

Location: `internal/infrastructure/dependency/dependency.go`

1. Add interactor field to `Dependency` struct
2. Initialize repository and interactor in `Inject()` method
3. Update `grpc/run.go` to pass interactor to handler constructor

See: [references/handler-patterns.md](references/handler-patterns.md#di-registration)

## Step 10: Generate Mocks & Test

```bash
make generate.mock
make test
```

## Checklist

- [ ] Input structs with `Validate()` method
- [ ] Output struct for List operation
- [ ] Interactor interface with `//go:generate`
- [ ] Interactor implementation with proper transaction handling
- [ ] Proto model/enum definitions
- [ ] Proto request/response messages with `openapiv2_schema`
- [ ] Proto service RPCs with HTTP annotations
- [ ] Proto code generated (`make generate.buf`)
- [ ] Handler marshaller (both directions + enums)
- [ ] Handler methods
- [ ] Handler struct updated
- [ ] DI configuration updated
- [ ] Mocks generated (`make generate.mock`)
- [ ] Tests passing (`make test`)

## Common Errors

| Error | Solution |
|-------|----------|
| `undefined: pb.Example` | Run `make generate.buf` |
| `undefined: mock_usecase.MockAdminExampleInteractor` | Run `make generate.mock` |
| Handler method not found | Check handler struct field name and interface registration |

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.