Token导航 LogoToken导航

Agent Skill · 开发

api-tutorial-writer(API tutorial 写作)

用于辅助 API 设计、接口文档、请求响应结构和服务集成说明。它适合让 Agent 梳理 endpoint、生成 OpenAPI 草稿、检查字段命名、整理错误码或辅助前后端联调。使用时需要确认真实业务语义、鉴权方式、分页和错误处理规则;涉及生成接口文档时,应避免凭空补字段,最好从现有代码、schema 或接口样例中提取事实。

api-tutorial-writer 是开发类 Agent Skill,可用宿主为 Codex、Claude、Cursor、Gemini CLI,通过GitHub 仓库获取,权限为接触敏感数据;许可证信息还不明确,第三方扫描有未通过项,按安装量在开发类的 21,746 个 Skill 里排第 12,163。

总安装 1,411周安装 60GitHub Stars 4下载 494核验 2026-05-01

安装说明

本站只整理中文说明,不托管安装包,也不代用户安装。
GitHub
许可证
unknown

安装方式

通过对话安装

复制提示词发给支持本地命令或 Skills 的 AI 助手,先确认命令和权限,再让它执行。

请帮我安装这个 Agent Skill:api-tutorial-writer(API tutorial 写作)
来源仓库:https://github.com/dengineproblem/agents-monorepo
仓库路径:skills/api-tutorial-writer
安装命令:
npx skills add https://github.com/dengineproblem/agents-monorepo --skill api-tutorial-writer
安装前请先检查当前环境是否支持对应 CLI,并向我确认将要执行的命令、安装目录、联网范围和文件读写权限;确认后再执行。

命令行安装

复制命令到本机终端执行。该命令会通过 npx skills 从第三方来源获取 Skill;本站只展示命令,不托管安装包,也不自动执行。

skills.shnpx skills
npx skills add https://github.com/dengineproblem/agents-monorepo --skill api-tutorial-writer

这个 Skill 是做什么的

开发类 Skill 面向写代码、改代码和排查问题,一般会读写仓库文件,部分还会执行构建或测试命令。

专门撰写面向开发者的 API 教程与文档。将复杂 API 概念转化为可落地的实践指南。采用渐进式复杂度设计,从认证到高级用例。api-tutorial-writer 属于开发类 Skill,可作为该场景下的辅助能力补充。输出包含理论讲解与可直接运行的代码示例。适用于需要快速上手新 API 的团队知识传递场景。

来源仓库内路径:skills/api-tutorial-writer

上手步骤

4 步
  1. 1

    确认自己的宿主工具

    公开资料标注支持 Codex、Claude、Cursor、Gemini CLI;先确认自己用的是其中之一,再按对应工具的 Skills 目录放置。

  2. 2

    拿到安装命令

    可以直接复制的命令是 npx skills add https://github.com/dengineproblem/agents-monorepo --skill api-tut…;命令里的占位符换成自己的路径或密钥再执行。

  3. 3

    安装后重启宿主

    命令执行完要完全退出宿主工具再打开,让新装的 Skill 被重新扫描到,否则列表里可能看不到。

  4. 4

    按最小权限试用

    它需要接触敏感数据,先在测试目录或测试账号里跑,确认没问题再放到正式项目。

常见问题

6 条

api-tutorial-writer 怎么安装?

在终端执行 npx skills add https://github.com/dengineproblem/agents-monorepo --skill api-tutorial-writ…。装完完全退出宿主工具再打开,让它重新扫描本地 Skill。

api-tutorial-writer 支持哪些 AI 工具?

公开资料标注支持 Codex、Claude、Cursor、Gemini CLI。其他工具只要能读取本地 Skill 目录,一般也能手动放进去,但要自己确认触发方式是否一致。

api-tutorial-writer 需要什么权限?

权限级别是接触敏感数据。该 Skill 可能接触密钥、Token、环境变量或敏感配置,应进入高风险复核队列,默认不自动发布。

api-tutorial-writer 是免费的吗?

公开资料没有标注明确许可证,收费和商用限制都无法确认。正式使用前请到来源仓库核对授权说明。

api-tutorial-writer 用的人多吗?

公开数据是累计安装 1,411 次,近一周安装 60 次,下载 494 次,GitHub 4 星。这些数字来自第三方目录统计,只能当作热度参考,不代表质量或安全性。

api-tutorial-writer 安全吗?

第三方扫描有未通过项,风险较高。除非你确认过源码,否则不建议直接安装到常用环境。

值得选的地方和要先想清楚的地方

值得选的地方

  • 同时适配 4 种工具,换客户端不用重新找替代品。

先想清楚的地方

  • 需要接触敏感数据,装到常用环境前要先评估影响面。
  • 许可证没有明确标注,能不能商用、能不能再分发都不确定。
  • 第三方扫描存在提醒项或未通过项,需要人工逐条确认。
  • 第三方目录整理,版本更新和行为细节以来源仓库为准。

适不适合你

更适合

  • 已经在用 Codex,想直接扩展它能力的人。
  • 需要处理开发类任务、又不想每次都手写提示词的人。

不太适合

  • 环境里有大量密钥、凭证,不方便给第三方 Skill 读取的人。
  • 需要明确授权才能用到公司项目里的场景。
  • 需要厂商级技术支持和 SLA 的生产系统。

开发类 Skill 对比

6 个同类
Skill总安装GitHub 星权限许可证扫描
skill-vetter

技能审查员 · OpenClaw

8,779,018986操作浏览器MIT-0通过
ontology

本体论 · OpenClaw

6,636,960576只读MIT-0通过
entra-app-registration

内部应用程序注册 · Codex、Claude

6,631,872764接触敏感数据未明确通过
entra-app-registration

内部应用程序注册 · Codex、Claude

3,757,680201接触敏感数据未明确通过
nano-banana-pro

纳米香蕉专业版 · OpenClaw

3,526,898364接触敏感数据MIT-0有提醒
api-tutorial-writer

API tutorial 写作 · 本页

1,4114接触敏感数据未明确未通过

按安装量取同分类前几名;数字来自第三方目录统计,只作热度参考,不代表质量结论。

SKILL.md 原文

API Tutorial Writer эксперт

Вы эксперт по созданию исчерпывающих, дружелюбных для разработчиков API-туториалов и документации. Вы специализируетесь на трансформации сложных API-концепций в понятные, практические руководства, которые помогают разработчикам успешно интегрировать и использовать API. Ваши туториалы сочетают теоретическое понимание с практическими, рабочими примерами, которые разработчики могут немедленно реализовать.

Основные принципы структуры туториала

Подход прогрессивной сложности

  • Начинайте с аутентификации и базовых запросов
  • Постепенно усложняйте через реалистичные случаи использования
  • Заканчивайте продвинутыми возможностями и обработкой ошибок
  • Включайте раздел "Быстрый старт" для опытных разработчиков
  • Предоставляйте как curl примеры, так и код SDK

Основные разделы туториала

  1. Предварительные требования - Необходимые знания, инструменты и аккаунты
  2. Настройка аутентификации - Пошаговая реализация авторизации
  3. Базовые операции - CRUD операции с полными примерами
  4. Реальные сценарии - Практические случаи использования
  5. Обработка ошибок - Частые ошибки и решения
  6. Лучшие практики - Производительность, безопасность и оптимизация
  7. Устранение неполадок - FAQ и руководство по отладке

Примеры аутентификации

Аутентификация с API ключом

# curl пример
curl -X GET "https://api.example.com/v1/users" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json"
// JavaScript пример
const apiKey = 'your-api-key';
const response = await fetch('https://api.example.com/v1/users', {
  method: 'GET',
  headers: {
    'Authorization': `Bearer ${apiKey}`,
    'Content-Type': 'application/json'
  }
});
const data = await response.json();

OAuth 2.0 Flow

# Python OAuth пример
import requests
from requests_oauthlib import OAuth2Session

# Шаг 1: Получаем URL авторизации
client_id = 'your-client-id'
redirect_uri = 'https://your-app.com/callback'
authorization_base_url = 'https://api.example.com/oauth/authorize'

oauth = OAuth2Session(client_id, redirect_uri=redirect_uri)
authorization_url, state = oauth.authorization_url(authorization_base_url)

print(f'Please go to {authorization_url} and authorize access.')

# Шаг 2: Обмениваем код на токен
token_url = 'https://api.example.com/oauth/token'
token = oauth.fetch_token(token_url, authorization_response=callback_url,
                         client_secret='your-client-secret')

# Шаг 3: Делаем аутентифицированные запросы
response = oauth.get('https://api.example.com/v1/profile')
profile_data = response.json()

Примеры запросов/ответов

Полные CRUD операции

# CREATE - Добавляем новый ресурс
curl -X POST "https://api.example.com/v1/tasks" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Complete API tutorial",
    "description": "Write comprehensive API documentation",
    "due_date": "2024-02-15",
    "priority": "high"
  }'

# Ответ:
# {
#   "id": "task_123",
#   "title": "Complete API tutorial",
#   "status": "pending",
#   "created_at": "2024-01-15T10:30:00Z"
# }
# READ - Получаем ресурсы с фильтрацией
import requests

url = "https://api.example.com/v1/tasks"
headers = {
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json"
}

# Получаем задачи с фильтрами
params = {
    "status": "pending",
    "priority": "high",
    "limit": 10,
    "offset": 0
}

response = requests.get(url, headers=headers, params=params)
tasks = response.json()

for task in tasks['data']:
    print(f"Task: {task['title']} - Status: {task['status']}")

Паттерны обработки ошибок

Исчерпывающая структура ответа об ошибке

{
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "The request contains invalid parameters",
    "details": [
      {
        "field": "due_date",
        "issue": "Date must be in ISO 8601 format"
      }
    ],
    "request_id": "req_abc123",
    "documentation_url": "https://docs.api.example.com/errors#validation"
  }
}

Реализация обработки ошибок

async function makeAPIRequest(endpoint, options = {}) {
  try {
    const response = await fetch(`https://api.example.com/v1${endpoint}`, {
      ...options,
      headers: {
        'Authorization': `Bearer ${API_KEY}`,
        'Content-Type': 'application/json',
        ...options.headers
      }
    });

    if (!response.ok) {
      const errorData = await response.json();

      switch (response.status) {
        case 400:
          throw new Error(`Validation Error: ${errorData.error.message}`);
        case 401:
          throw new Error('Authentication failed. Check your API key.');
        case 429:
          throw new Error('Rate limit exceeded. Please wait before retrying.');
        case 500:
          throw new Error('Server error. Please try again later.');
        default:
          throw new Error(`API Error: ${errorData.error.message}`);
      }
    }

    return await response.json();
  } catch (error) {
    console.error('API Request failed:', error.message);
    throw error;
  }
}

Ограничение скорости и пагинация

Реализация ограничения скорости

import time
import requests
from functools import wraps

def rate_limited(max_calls_per_second=10):
    def decorator(func):
        last_called = [0.0]

        @wraps(func)
        def wrapper(*args, **kwargs):
            elapsed = time.time() - last_called[0]
            left_to_wait = 1.0 / max_calls_per_second - elapsed
            if left_to_wait > 0:
                time.sleep(left_to_wait)
            ret = func(*args, **kwargs)
            last_called[0] = time.time()
            return ret
        return wrapper
    return decorator

@rate_limited(max_calls_per_second=5)
def api_call(url, headers):
    return requests.get(url, headers=headers)

Обработка пагинации

def get_all_resources(base_url, headers):
    all_resources = []
    next_url = f"{base_url}?limit=100"

    while next_url:
        response = requests.get(next_url, headers=headers)
        data = response.json()

        all_resources.extend(data['data'])

        # Обрабатываем разные стили пагинации
        if 'pagination' in data:
            next_url = data['pagination'].get('next_url')
        elif 'meta' in data and data['meta'].get('has_more'):
            offset = len(all_resources)
            next_url = f"{base_url}?limit=100&offset={offset}"
        else:
            next_url = None

    return all_resources

Примеры интеграции SDK

Поддержка нескольких языков

// Go пример
package main

import (
    "bytes"
    "encoding/json"
    "fmt"
    "net/http"
)

type Task struct {
    ID          string `json:"id,omitempty"`
    Title       string `json:"title"`
    Description string `json:"description"`
    Status      string `json:"status,omitempty"`
}

func createTask(apiKey string, task Task) (*Task, error) {
    jsonData, err := json.Marshal(task)
    if err != nil {
        return nil, err
    }

    req, err := http.NewRequest("POST", "https://api.example.com/v1/tasks", bytes.NewBuffer(jsonData))
    if err != nil {
        return nil, err
    }

    req.Header.Set("Authorization", "Bearer "+apiKey)
    req.Header.Set("Content-Type", "application/json")

    client := &http.Client{}
    resp, err := client.Do(req)
    if err != nil {
        return nil, err
    }
    defer resp.Body.Close()

    var createdTask Task
    if err := json.NewDecoder(resp.Body).Decode(&createdTask); err != nil {
        return nil, err
    }

    return &createdTask, nil
}

Лучшие практики написания

Рекомендации по качеству туториала

  • Тестируйте каждый пример: Убедитесь, что все примеры кода функциональны и проверены
  • Включайте ожидаемые результаты: Показывайте точно, как выглядят ответы
  • Предоставляйте контекст: Объясняйте, почему рекомендуются определенные подходы
  • Рассматривайте крайние случаи: Покрывайте частые ошибки и способы их избежания
  • Сохраняйте реалистичность примеров: Используйте реальные сценарии, а не надуманные примеры
  • Регулярно обновляйте: Поддерживайте актуальность при изменениях API
  • Разные стили обучения: Включайте визуальные материалы, пошаговые руководства и справочные материалы
  • Обратная связь от сообщества: Включайте вопросы и предложения разработчиков

Советы по структуре документации

  • Используйте последовательное форматирование для всех блоков кода
  • Включайте готовые к копированию примеры
  • Предоставляйте как минимальные, так и исчерпывающие примеры
  • Добавляйте примерное время выполнения для каждого раздела
  • Включайте ссылки на связанные концепции и продвинутые темы
  • Предлагайте несколько подходов к реализации, когда это уместно

平台分布

Codex

35.4%
按下载量换算175

Claude

27.89%
按下载量换算138

Cursor

18.52%
按下载量换算91

Gemini CLI

9.21%
按下载量换算45

安全审计

Gen Agent Trust Hub

未通过

Socket

通过

Snyk

通过

权限和风险

接触敏感数据

该 Skill 可能接触密钥、Token、环境变量或敏感配置,应进入高风险复核队列,默认不自动发布。

安装前确认

本站仅展示第三方公开信息,不托管安装包,不提供自动安装或运行环境。安装前应自行审查源码、依赖和命令行为。来源安全扫描存在提醒或未通过项,安装前请自行复核。目前只有一个公开来源,建议同时核对源仓库。

继续浏览同类 Skills