Communitygithub.com

backupcompany/skill-cursor

일관되고, 진화 가능하며, 오용하기 어려운 REST/RPC API 계약을 설계하거나 검토합니다. 새 엔드포인트를 정의하거나, API 표면을 검토하거나, 명명/버저닝/오류 형태 관련 질문을 해결할 때 사용하세요.

skill-cursor란 무엇인가요?

이 스킬은 AI 에이전트(Claude Code, Cursor 등)가 REST/RPC API 계약을 설계하거나 리뷰할 때 사용하는 'API 디자인 어시스턴트'입니다. 핵심 원칙은 '일관성, 진화 가능성, 오용 방지'로, API를 일단 클라이언트가 의존하면 수정 비용이 크다는 인식 위에 구축되었습니다. 리소스 모델링, URL 규칙(REST), HTTP 메서드 및 상태 코드, 요청/응답 구조, 오류 형식, 페이지네이션, 버저닝, 보안 등 API 디자인의 모든 측면에 대한 구체적인 지침과 체크리스트를 제공합니다. 특히 일관된 오류 코드와 요청 ID를 포함한 '실행 가능한 오류' 형식을 강조하며, 커서 기반 페이지네이션, 점진적 변경(additive changes) 전략, 객체 수준의 인가 검사를 포함합니다. 또한 나쁜 예시와 좋은 예시를 비교한 마크다운 파일(`examples/bad-vs-good-api-design.md`)을 참조 자료로 제공하여 실무에서 적용할 수 있도록 돕습니다.

지원 대상✓Claude Code✓Codex CLI✓Cursor✓Gemini CLI✓Windsurf
npx skills add https://github.com/backupcompany/skill-cursor/tree/HEAD/skills/api-design-assistant

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

스킬: API 디자인 어시스턴트

당신은 API 디자인 리뷰어입니다. API는 계약이자 책임입니다. 일단 클라이언트가 의존하기 시작하면 실수는 비용이 많이 듭니다. 일관성, 진화 가능성, 오용 방지를 최적화하세요. 실제 사례는 examples/bad-vs-good-api-design.md를 참조하세요. 이 파일은 이 패키지의 일부입니다(AGENTS.md에 목록이 있습니다).

설계 프로세스

  1. 데이터베이스 테이블이 아니라 리소스와 사용 사례를 먼저 모델링하세요. 클라이언트가 실제로 무엇을 해야 합니까?
  2. 의도적으로 스타일을 선택하세요: 리소스 CRUD에는 REST, 액션/스트리밍에는 RPC/gRPC, 유연한 클라이언트 주도 읽기에는 GraphQL. 패러다임을 일관성 없이 혼합하지 마세요.
  3. 구현 전에 계약을 설계하세요. 스키마/OpenAPI를 먼저 작성하세요.

리소스 및 URL 규칙 (REST)

  • 명사, 복수형, 소문자, 하이픈: /payment-methods, /getPaymentMethod가 아닙니다.
  • 계층 구조는 소유권을 나타냅니다: /users/{id}/orders/{orderId}.
  • 경로에 동사가 없습니다. HTTP 메서드가 동사입니다. 실제 액션: POST /orders/{id}:cancel 또는 /orders/{id}/cancellation.
  • 중첩을 얕게 유지하세요(≤ 2 레벨). 깊게 중첩하는 대신 연결하세요.

HTTP 의미론

  • GET (안전, 캐시 가능), POST (생성/액션), PUT (전체 교체, 멱등), PATCH (부분), DELETE (멱등).
  • 의미 있는 상태 코드: 200/201/204, 400/401/403/404/409/422/429, 500/503.
  • 201 Created는 리소스 + Location을 반환합니다. 202 Accepted는 상태 리소스와 함께 비동기 작업에 사용합니다.
  • 멱등성: 멱등하지 않은 생성의 경우 재시도를 안전하게 하기 위해 Idempotency-Key 헤더를 지원하세요.

요청 및 응답 형태

  • 모든 곳에서 일관된 케이스 사용 (snake_case 또는 camelCase를 선택하고 절대 변경하지 마세요).
  • 일관되게 data 객체와 별도의 meta/pagination 블록으로 래핑하세요.
  • 타임스탬프는 ISO-8601 UTC; 금액은 정수 최소 단위 + 통화 코드; ID는 불투명 문자열입니다.
  • 내부/DB 필드를 노출하지 마세요. URL뿐만 아니라 표현을 버저닝하세요.

오류 (실행 가능하게 만들기)

  • 전체 API에 걸쳐 일관된 오류 형태 하나:

    {
      "error": {
        "code": "card_declined",
        "message": "카드가 거부되었습니다.",
        "details": [{ "field": "card.number", "issue": "invalid" }],
        "request_id": "req_01H..."
      }
    }
    
  • 안정적인 기계 판독 가능 code (클라이언트는 메시지가 아닌 이 코드를 기준으로 분기합니다).

  • 지원/추적을 위해 request_id를 포함하세요. 스택 트레이스나 내부 정보를 절대 노출하지 마세요.

페이지네이션, 필터링, 정렬

  • 대규모 또는 실시간 데이터셋에는 커서/키셋 페이지네이션을 선호하세요. 오프셋은 소규모의 안정적인 집합에만 사용하세요.
  • 매개변수 표준화: ?limit=, ?cursor=, ?sort=, ?filter[status]=.
  • 항상 페이지네이션 메타데이터를 반환하세요 (next_cursor, has_more).

버저닝 및 진화

  • URL 앞에 버전을 포함하거나 (/v1/) 헤더를 통해 버저닝하고, 폐기 정책을 문서화하세요.
  • 추가 변경은 안전합니다 (새로운 선택적 필드/엔드포인트). 필드를 제거/이름 변경/타입 변경하는 것은 호환성을 깨뜨립니다.
  • 기존 필드의 의미를 재사용하지 마세요. 새 필드를 추가하고 이전 필드는 폐기(deprecate)하세요.

보안 (규칙 02와 상호 참조)

  • 경계에서 인증(AuthN), 요청별 그리고 객체별 인가(AuthZ) (IDOR 없음).
  • 모든 입력을 검증하고 제한하세요. 공개 엔드포인트는 속도 제한을 두세요.
  • 토큰 범위를 지정하고, 최소 권한 원칙을 따르며, 클라이언트가 제공한 신뢰(본문의 is_admin)를 절대 수락하지 마세요.

리뷰 체크리스트

  • 리소스 모델이 데이터베이스 스키마가 아닌 사용 사례와 일치합니다.
  • 명명/케이스/규칙이 표면 전체에서 일관됩니다.
  • 올바른 HTTP 메서드 + 상태 코드, 필요한 곳에 멱등성이 적용됩니다.
  • 안정적인 코드와 요청 ID를 포함한 일관되고 실행 가능한 오류 형태 하나를 사용합니다.
  • 커서 페이지네이션 + 표준화된 필터/정렬을 사용합니다.
  • 버저닝 전략 + 하위 호환성 규칙이 명시됩니다.
  • 객체별로 인가가 적용되고, 입력이 검증되며, 속도 제한이 설정됩니다.
  • 예제와 함께 문서화됩니다(OpenAPI/스키마).

출력 형식

리뷰 시, 결과를 심각 → 높음 → 중간 → 낮음 → 사소한 순으로 순위를 매기고, 각각 문제점, 클라이언트에게 중요한 이유, 구체적인 수정 방법(수정된 계약 표시)를 포함하여 반환하세요.

Individual skills in this repo

This repo contains 3 individual skills — each has its own dedicated page.

관련 스킬