スキル一覧に戻る
atilladeniz

api-generation

by atilladeniz

Full-stack monorepo: Next.js 16 (App Router) + Go (Clean Architecture) + PostgreSQL + Better Auth + TanStack Query + Orval + Goca CLI + shadcn/ui + Tailwind CSS 4

0🍴 0📅 2026年1月12日
GitHubで見るManusで実行

SKILL.md


name: api-generation description: Generate TypeScript API client from Swagger/Go comments. Use when updating API endpoints, adding new routes, or regenerating the frontend API client after backend changes. allowed-tools: Read, Edit, Write, Bash, Glob, Grep

API Generation

Generate typed TypeScript API client from Go Swagger comments using swag + Orval.

Workflow

Go Handler → swag init → swagger.json → Orval → TypeScript Hooks

One Command for Everything

make api

This executes:

  1. swag init → Generates backend/docs/swagger.json from Go comments
  2. orval → Generates TypeScript Hooks in frontend/src/shared/api/

Adding a New Endpoint

Step 1: Go Handler with Swagger Comments

// internal/handler/product.go

// GetProducts godoc
// @Summary List all products
// @Description Get all products for the authenticated user
// @Tags products
// @Accept json
// @Produce json
// @Success 200 {array} ProductResponse
// @Failure 401 {object} ErrorResponse
// @Security BearerAuth
// @Router /products [get]
func (h *ProductHandler) GetProducts(w http.ResponseWriter, r *http.Request) {
    // Implementation
}

// CreateProduct godoc
// @Summary Create a product
// @Description Create a new product
// @Tags products
// @Accept json
// @Produce json
// @Param request body CreateProductRequest true "Product data"
// @Success 201 {object} ProductResponse
// @Failure 400 {object} ErrorResponse
// @Failure 401 {object} ErrorResponse
// @Security BearerAuth
// @Router /products [post]
func (h *ProductHandler) CreateProduct(w http.ResponseWriter, r *http.Request) {
    // Implementation
}

Step 2: Define Response/Request Types

// In handler or separate types.go

type ProductResponse struct {
    ID    string  `json:"id" example:"prod_123"`
    Name  string  `json:"name" example:"Widget"`
    Price float64 `json:"price" example:"29.99"`
}

type CreateProductRequest struct {
    Name  string  `json:"name" example:"Widget"`
    Price float64 `json:"price" example:"29.99"`
}

Step 3: Generate API Client

make api

Step 4: Use in Frontend

import { useGetProducts, usePostProducts } from "@/api/endpoints/products/products"

function ProductsPage() {
  const { data, isLoading } = useGetProducts()
  const createProduct = usePostProducts()

  const handleCreate = () => {
    createProduct.mutate({ data: { name: "New", price: 10 } })
  }

  return (...)
}

Swagger Annotation Reference

AnnotationDescription
@SummaryShort description
@DescriptionDetailed description
@TagsGrouping (becomes folder in endpoints/)
@AcceptRequest Content-Type
@ProduceResponse Content-Type
@ParamParameter (body, query, path)
@SuccessSuccess response
@FailureError response
@SecurityAuth requirement
@RouterHTTP path and method

Generated Files

frontend/src/shared/api/
├── endpoints/
│   ├── products/        # Grouped by @Tags
│   │   └── products.ts  # useGetProducts, usePostProducts, etc.
│   └── users/
│       └── users.ts
├── models/              # TypeScript Types
└── custom-fetch.ts      # Fetch Wrapper with Auth

Important Rules

  • Never manually edit generated files
  • Always run make api after handler changes
  • Tags become folder names → @Tags productsendpoints/products/
  • operationId is automatically generated from Router path

スコア

総合スコア

65/100

リポジトリの品質指標に基づく評価

SKILL.md

SKILL.mdファイルが含まれている

+20
LICENSE

ライセンスが設定されている

0/10
説明文

100文字以上の説明がある

+10
人気

GitHub Stars 100以上

0/15
最近の活動

1ヶ月以内に更新

+10
フォーク

10回以上フォークされている

0/5
Issue管理

オープンIssueが50未満

+5
言語

プログラミング言語が設定されている

+5
タグ

1つ以上のタグが設定されている

+5

レビュー

💬

レビュー機能は近日公開予定です