Back to skills
SKILL.md
Add Api Endpoint
ASecurityCreate 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
Works with
Security analysis
100/100npx -y skills add majiayu000/claude-skill-registry --skill add-api-endpoint --agent claude-codeAre you the author of Add Api Endpoint?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/majiayu000-add-api-endpoint-claude-skill-registry)---
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
Comments
Loading comments…
Newsletter
Get the weekly list of safe new skills, and the ones we pulled.