jpskill.com
🛠️ 開発・MCP コミュニティ

frontend-backend-integration

フロントエンドとバックエンド間のAPI連携における、データの整合性確認やインターフェースのデバッグ作業を効率的に行い、スムーズなシステム連携を実現するSkill。

📜 元の英語説明(参考)

前后端对接。当用户需要检查前后端API对接、调试接口调用、确保数据格式一致时使用此技能。

🇯🇵 日本人クリエイター向け解説

一言でいうと

フロントエンドとバックエンド間のAPI連携における、データの整合性確認やインターフェースのデバッグ作業を効率的に行い、スムーズなシステム連携を実現するSkill。

※ jpskill.com 編集部が日本のビジネス現場向けに補足した解説です。Skill本体の挙動とは独立した参考情報です。

⚡ おすすめ: コマンド1行でインストール(60秒)

下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。

🍎 Mac / 🐧 Linux
mkdir -p ~/.claude/skills && cd ~/.claude/skills && curl -L -o frontend-backend-integration.zip https://jpskill.com/download/8394.zip && unzip -o frontend-backend-integration.zip && rm frontend-backend-integration.zip
🪟 Windows (PowerShell)
$d = "$env:USERPROFILE\.claude\skills"; ni -Force -ItemType Directory $d | Out-Null; iwr https://jpskill.com/download/8394.zip -OutFile "$d\frontend-backend-integration.zip"; Expand-Archive "$d\frontend-backend-integration.zip" -DestinationPath $d -Force; ri "$d\frontend-backend-integration.zip"

完了後、Claude Code を再起動 → 普通に「動画プロンプト作って」のように話しかけるだけで自動発動します。

💾 手動でダウンロードしたい(コマンドが難しい人向け)
  1. 1. 下の青いボタンを押して frontend-backend-integration.zip をダウンロード
  2. 2. ZIPファイルをダブルクリックで解凍 → frontend-backend-integration フォルダができる
  3. 3. そのフォルダを C:\Users\あなたの名前\.claude\skills\(Win)または ~/.claude/skills/(Mac)へ移動
  4. 4. Claude Code を再起動

⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。

🎯 このSkillでできること

下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。

📦 インストール方法 (3ステップ)

  1. 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
  2. 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
  3. 3. 展開してできたフォルダを、ホームフォルダの .claude/skills/ に置く
    • · macOS / Linux: ~/.claude/skills/
    • · Windows: %USERPROFILE%\.claude\skills\

Claude Code を再起動すれば完了。「このSkillを使って…」と話しかけなくても、関連する依頼で自動的に呼び出されます。

詳しい使い方ガイドを見る →
最終更新
2026-05-18
取得日時
2026-05-18
同梱ファイル
1

📖 Skill本文(日本語訳)

※ 原文(英語/中国語)を Gemini で日本語化したものです。Claude 自身は原文を読みます。誤訳がある場合は原文をご確認ください。

前后端对接

機能説明

このスキルは、特にフロントエンドとバックエンドのAPI連携のチェックとデバッグに使用されます。内容は以下の通りです。

  • フロントエンドとバックエンドのインターフェースドキュメントのチェック
  • コード分析によるAPI仕様のまとめ
  • リクエスト/レスポンス形式の一貫性の検証
  • データ構造の正しいマッピングの確認
  • ネットワーク呼び出し問題のデバッグ

使用場面

  • "フロントエンドとバックエンドの連携が正しいか確認したい"
  • "フロントエンドからバックエンドAPIを呼び出すとエラーが発生する"
  • "フロントエンドとバックエンドのデータ形式の一貫性を確保したい"
  • "インターフェース呼び出しの問題をデバッグしたい"
  • "新しいAPIの連携作業"

対接フロー

第一歩:プロジェクト構造の確認

まず、プロジェクトのフロントエンドとバックエンドのディレクトリ構造を理解します。

# フロントエンドディレクトリの確認
ls frontend/src/
ls frontend/src/api/
ls frontend/src/stores/

# バックエンドディレクトリの確認
ls backend/
ls backend/app/

第二歩:APIドキュメントの検索または作成

既存のドキュメントを優先的に検索

# APIドキュメントの検索
find docs/ -name "*api*" -o -name "*API*" -o -name "*接口*"
find backend/docs/ -type f
find frontend/docs/ -type f

よくあるドキュメントの場所

  • docs/api-reference.md - APIリファレンスドキュメント
  • docs/frontend/ - フロントエンド関連ドキュメント
  • backend/tests/test_*.py - バックエンドテストファイル(APIの動作を含む)
  • backend/README.md - バックエンドの説明

第三歩:バックエンドAPI仕様の分析

1. バックエンドのメインエントリファイルを確認

# backend/app/main.py または類似ファイル
# 重点的に探すもの:
# - @app.get/post/put/delete デコレータで定義されたルート
# - response_model で指定されたレスポンス形式
# - パラメータ定義(query, path, body)

2. Schema定義の確認

# backend/app/schemas.py
# 重点的に探すもの:
# - Pydanticモデル定義
# - フィールドタイプと検証ルール
# - ApiResponse形式
# - PaginatedResponse形式

3. テストファイルの確認

# backend/tests/test_main.py
# 重点的に探すもの:
# - テストリクエストのパラメータ形式
# - 予想されるレスポンス形式
# - アサーションチェックのデータ構造

第四歩:フロントエンドAPI呼び出しの分析

1. APIのラップを確認

// frontend/src/api/index.js
// 重点的に探すもの:
// - baseURL設定
# - axiosインターセプター処理
# - 各APIメソッドのパラメータと戻り値

2. Store状態管理の確認

// frontend/src/stores/*.js
// 重点的に探すもの:
// - API呼び出し方法
# - レスポンスデータ処理方法
# - データ抽出パス(res.data vs res.items)

3. ページコンポーネントの確認

// frontend/src/views/*.vue
// 重点的に探すもの:
// - API呼び出しタイミング
# - データ使用方法
# - エラー処理

第五歩:比較検証

レスポンス形式対応表

バックエンドの戻り値形式 フロントエンドで抽出 検証ポイント
ApiResponse {code, message, data} res.data フロントエンドで.dataを使用しているか
PaginatedResponse {items, total, page} res.items, res.total フロントエンドで直接アクセスしているか
ネストされたオブジェクト {category: {id, name}} item.category.name コンポーネントが正しくアクセスしているか
配列フィールド {tags: [...]} item.tags.map() 配列として処理しているか

ポート設定検証

バックエンド設定

# backend/app/config.py
# host, port 設定を探す
# デフォルトは通常 0.0.0.0:8000

フロントエンドプロキシ設定

// frontend/vite.config.js
// server.proxy['/api'] はバックエンドアドレスを指すべき
// 例:target: 'http://localhost:8000'

フロントエンドbaseURL

// frontend/src/api/index.js
// baseURL は '/api'(プロキシ経由)であるべき

第六歩:チェックリスト

  • [ ] バックエンドAPIエンドポイントパスとフロントエンドの呼び出しが一致している
  • [ ] リクエストメソッド(GET/POST/PUT/DELETE)が一致している
  • [ ] リクエストパラメータの名前とタイプが正しい
  • [ ] レスポンス形式の処理が正しい(.data vs 直接アクセス)
  • [ ] データフィールドのマッピングが正しい(ネストされたオブジェクト、配列)
  • [ ] エラー処理が例外的な状況をカバーしている
  • [ ] CORS設定がフロントエンドドメインを許可している

よくある問題

問題1:レスポンス形式の不一致

症状:フロントエンドでデータが取得できず、undefinedと表示される

原因:バックエンドの一部のAPIはApiResponseでラップして返し、一部は直接データを返す

解決策

// バックエンドの戻り値形式を確認し、フロントエンドの処理を調整する
// ApiResponse形式の場合:
this.data = res.data

// 直接戻り値形式の場合:
this.data = res

問題2:CORSエラー

症状:ブラウザのコンソールにCORS policyエラーが表示される

解決策

# backend/app/main.py
app.add_middleware(
    CORSMiddleware,
    allow_origins=["http://localhost:5173"],  # フロントエンドアドレス
    allow_credentials=True,
    allow_methods=["*"],
    allow_headers=["*"],
)

問題3:ポートの衝突

症状:フロントエンド起動後、バックエンドAPIにアクセスできない

解決策

  • バックエンドが正しいポートで実行されているか確認する(デフォルト8000)
  • フロントエンドのvite.config.jsのproxy設定を確認する
  • netstat -ano | findstr :8000を使用してポートの占有を確認する

問題4:フィールド名の不一致

症状:一部のデータが正常に表示されない

解決策

  • バックエンドのSchema定義とフロントエンドで使用するフィールドを比較する
  • snake_case vs camelCase変換を確認する
  • ネストされたオブジェクトのアクセスパスを確認する

実戦事例

事例:Vue3 + FastAPI 連携

バックエンド(FastAPI)

@app.get("/api/articles", response_model=PaginatedResponse)
async def list_articles(page: int = 1, page_size: int = 20):
    # 戻り値形式:{items: [...], total: 100, page: 1, page_size: 20, total_pages: 5}
    return PaginatedResponse(...)

フロントエンド(Vue3 + Pinia)

// stores/article.js
const res = await articleApi.getList({ page: 1, page_size: 20 })
// 直接アクセス。バックエンドがApiResponseではなくPaginatedResponseを返すため
this.articles = res.items || []
this.pagination = {
  total: res.total || 0,
  page: res.page || 1,
  // ...
}

事例:React + Node.js 連携

バックエンド(Express)

res.json({
  success: true,
  data: { items: [...], total: 100 }
})

フロントエンド(React)

const res = await api.get('/articles')
// .data.data.items にアクセスする必要がある
setItems(res.data.data.items)

ドキュメントテンプレート

API連携ドキュメントテンプレート

# 前后端API对接文档

## サービスアドレス
- フロントエンド:http://localhost:5173
- バックエンド:http://localhost:8000
- APIプロキシ:/api -> http://localhost:8000/api

## APIエンドポイントリスト

### 記事リスト
- **リクエスト**:`GET /api/articles?page=1&page_size=20`
- **レスポンス**:
  - 形式:直接 `PaginatedResponse`
  - フィールド:`{items, total, page, page_size, total_pages}`

### 記事詳細
- **リクエスト**:`GET /api/articles/{id}`
- **レスポンス**:
  - 形式:`ApiResponse {code, message, data}`
  - データは `data` フィールドにある

## データ構造

### 記事オブジェクト(リスト)
```javascript
{
  id: number,
  title: string,
  slug: string,
  summary: string | null,
  cover_image: string | null,
  category: { id, name, slug } | null,
  tags: [{ id, name, slug }],
  author_name: string,
  views: number,
  published_at: string | null
}


## 注意事項

1. **レスポンス形式の不統一**:多くのバックエンドフレームワークのリストインターフェースは直接ページネーションデータを返し、詳細インターフェースはラップされた形式を返す
2. **日付形式**:バックエンドは通常ISO形式の文字列を返し、フロントエンドは解析する必要がある
3. **空値処理**:フロントエンドはnullになる可能性のあるフィールドを処理する必要がある
4. **エラー処理**:インターセプターがHTTPエラーステータスを正しく処理することを確認する
5. **タイプセーフ**:TypeScriptを使用すると、タイプミスマッチを事前に発見できる

## ツール推奨

- **APIテスト**:Postman, curl, HTTPie
- **ネットワークキャプチャ**:ブラウザDevTools Networkパネル
- **ドキュメント生成**:FastAPI自動生成Swaggerドキュメント
- **タイプチェック**:TypeScriptインターフェース定義
📜 原文 SKILL.md(Claudeが読む英語/中国語)を展開

前后端对接

功能说明

此技能专门用于前后端API对接检查和调试,包括:

  • 检查前后端接口文档
  • 分析代码总结API规范
  • 验证请求/响应格式一致性
  • 确保数据结构正确映射
  • 调试网络调用问题

使用场景

  • "检查前后端对接是否正确"
  • "前端调用后端API报错"
  • "确保前后端数据格式一致"
  • "调试接口调用问题"
  • "新增API的对接工作"

对接流程

第一步:查看项目结构

首先了解项目的前后端目录结构:

# 查看前端目录
ls frontend/src/
ls frontend/src/api/
ls frontend/src/stores/

# 查看后端目录
ls backend/
ls backend/app/

第二步:查找或创建API文档

优先查找现有文档

# 查找API文档
find docs/ -name "*api*" -o -name "*API*" -o -name "*接口*"
find backend/docs/ -type f
find frontend/docs/ -type f

常见文档位置

  • docs/api-reference.md - API参考文档
  • docs/frontend/ - 前端相关文档
  • backend/tests/test_*.py - 后端测试文件(包含API行为)
  • backend/README.md - 后端说明

第三步:分析后端API规范

1. 查看后端主入口文件

# backend/app/main.py 或类似文件
# 重点查找:
# - @app.get/post/put/delete 装饰器定义的路由
# - response_model 指定的响应格式
# - 参数定义(query, path, body)

2. 查看Schema定义

# backend/app/schemas.py
# 重点查找:
# - Pydantic模型定义
# - 字段类型和验证规则
# - ApiResponse格式
# - PaginatedResponse格式

3. 查看测试文件

# backend/tests/test_main.py
# 重点查找:
# - 测试请求的参数格式
# - 预期的响应格式
# - 断言检查的数据结构

第四步:分析前端API调用

1. 查看API封装

// frontend/src/api/index.js
// 重点查找:
// - baseURL配置
// - axios拦截器处理
// - 各个API方法的参数和返回值

2. 查看Store状态管理

// frontend/src/stores/*.js
// 重点查找:
// - API调用方式
// - 响应数据处理方式
// - 数据提取路径(res.data vs res.items)

3. 查看页面组件

// frontend/src/views/*.vue
// 重点查找:
// - API调用时机
// - 数据使用方式
// - 错误处理

第五步:对比验证

响应格式对照表

后端返回格式 前端应提取 验证点
ApiResponse {code, message, data} res.data 前端是否用.data
PaginatedResponse {items, total, page} res.items, res.total 前端是否直接访问
嵌套对象 {category: {id, name}} item.category.name 组件是否正确访问
数组字段 {tags: [...]} item.tags.map() 是否作为数组处理

端口配置验证

后端配置

# backend/app/config.py
# 查找 host, port 配置
# 默认通常是 0.0.0.0:8000

前端代理配置

// frontend/vite.config.js
// server.proxy['/api'] 应指向后端地址
// 例如:target: 'http://localhost:8000'

前端baseURL

// frontend/src/api/index.js
// baseURL 应为 '/api'(走代理)

第六步:检查清单

  • [ ] 后端API端点路径与前端调用一致
  • [ ] 请求方法(GET/POST/PUT/DELETE)匹配
  • [ ] 请求参数名称和类型正确
  • [ ] 响应格式处理正确(.data vs 直接访问)
  • [ ] 数据字段映射正确(嵌套对象、数组)
  • [ ] 错误处理覆盖异常情况
  • [ ] CORS配置允许前端域名

常见问题

问题1:响应格式不一致

症状:前端获取不到数据,显示undefined

原因:后端有些API返回ApiResponse包装,有些直接返回数据

解决方案

// 检查后端返回格式,调整前端处理
// 如果是 ApiResponse 格式:
this.data = res.data

// 如果是直接返回格式:
this.data = res

问题2:CORS错误

症状:浏览器控制台显示CORS policy错误

解决方案

# backend/app/main.py
app.add_middleware(
    CORSMiddleware,
    allow_origins=["http://localhost:5173"],  # 前端地址
    allow_credentials=True,
    allow_methods=["*"],
    allow_headers=["*"],
)

问题3:端口冲突

症状:前端启动后无法访问后端API

解决方案

  • 检查后端是否在正确端口运行(默认8000)
  • 检查前端vite.config.js的proxy配置
  • 使用netstat -ano | findstr :8000检查端口占用

问题4:字段名不匹配

症状:某些数据显示不正常

解决方案

  • 对比后端Schema定义和前端使用字段
  • 检查snake_case vs camelCase转换
  • 确认嵌套对象访问路径

实战案例

案例:Vue3 + FastAPI 对接

后端(FastAPI)

@app.get("/api/articles", response_model=PaginatedResponse)
async def list_articles(page: int = 1, page_size: int = 20):
    # 返回格式:{items: [...], total: 100, page: 1, page_size: 20, total_pages: 5}
    return PaginatedResponse(...)

前端(Vue3 + Pinia)

// stores/article.js
const res = await articleApi.getList({ page: 1, page_size: 20 })
// 直接访问,因为后端返回PaginatedResponse而不是ApiResponse
this.articles = res.items || []
this.pagination = {
  total: res.total || 0,
  page: res.page || 1,
  // ...
}

案例:React + Node.js 对接

后端(Express)

res.json({
  success: true,
  data: { items: [...], total: 100 }
})

前端(React)

const res = await api.get('/articles')
// 需要访问 .data.data.items
setItems(res.data.data.items)

文档模板

API对接文档模板

# 前后端API对接文档

## 服务地址
- 前端:http://localhost:5173
- 后端:http://localhost:8000
- API代理:/api -> http://localhost:8000/api

## API端点列表

### 文章列表
- **请求**:`GET /api/articles?page=1&page_size=20`
- **响应**:
  - 格式:直接 `PaginatedResponse`
  - 字段:`{items, total, page, page_size, total_pages}`

### 文章详情
- **请求**:`GET /api/articles/{id}`
- **响应**:
  - 格式:`ApiResponse {code, message, data}`
  - 数据在 `data` 字段中

## 数据结构

### 文章对象(列表)
```javascript
{
  id: number,
  title: string,
  slug: string,
  summary: string | null,
  cover_image: string | null,
  category: { id, name, slug } | null,
  tags: [{ id, name, slug }],
  author_name: string,
  views: number,
  published_at: string | null
}


## 注意事项

1. **响应格式不统一**:很多后端框架的列表接口直接返回分页数据,而详情接口返回包装格式
2. **日期格式**:后端通常返回ISO格式字符串,前端需要解析
3. **空值处理**:前端需要处理可能为null的字段
4. **错误处理**:确保拦截器正确处理HTTP错误状态
5. **类型安全**:使用TypeScript可以提前发现类型不匹配

## 工具推荐

- **API测试**:Postman, curl, HTTPie
- **网络抓包**:浏览器DevTools Network面板
- **文档生成**:FastAPI自动生成Swagger文档
- **类型检查**:TypeScript接口定义