Communitygithub.com

API 디자인 어시스턴트

일관성 있고 진화 가능하며 오용하기 어려운 REST/RPC API 계약을 설계하거나 검토합니다. 새 엔드포인트를 정의할 때, API 표면을 검토할 때, 또는 이름 지정/버전 관리/오류 형태에 대한 질문을 해결할 때 사용하세요.

API 디자인 어시스턴트란 무엇인가요?

이 스킬은 API 설계 검토자 역할을 수행하여, 개발자가 일관성 있고 진화 가능하며 오용하기 어려운 API 계약을 설계하거나 검토할 수 있도록 돕습니다. 주로 REST API를 대상으로 하지만 RPC, gRPC, GraphQL에도 적용 가능하며, Cursor, Claude Code, Codex, Windsurf 등 다양한 AI 에이전트 플랫폼에서 사용할 수 있습니다. 리소스 모델링, URL 규칙, HTTP 의미 체계, 요청/응답 형태, 오류 처리, 페이지 매김, 버전 관리, 보안 등 API 디자인의 핵심 측면을 다루는 체크리스트를 제공하며, 검토 시에는 중요도별로 분류된 구체적인 문제점, 영향, 수정 방법을 제시합니다. 또한 `examples/bad-vs-good-api-design.md` 파일을 통해 모범 사례와 일반적인 실수를 비교 학습할 수 있습니다.

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

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

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

문서

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

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

디자인 프로세스

  1. 데이터베이스 테이블이 아니라 리소스와 사용 사례를 먼저 모델링하세요. 클라이언트가 실제로 무엇을 해야 합니까?
  2. 의도적으로 스타일을 선택하세요: REST는 리소스 CRUD, 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/) 헤더를 통해 버전을 관리하고, 폐기 정책을 문서화하십시오.
  • 추가 변경은 안전합니다 (새로운 선택적 필드/엔드포인트). 필드 제거/이름 변경/유형 변경은 호환성을 깨뜨리는 변경입니다.
  • 기존 필드의 의미를 절대 재사용하지 마십시오. 새 필드를 추가하고 이전 필드를 폐기하십시오.

보안 (규칙 02와 교차 확인)

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

검토 체크리스트

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

출력 형식

검토 시, 치명적 → 높음 → 중간 → 낮음 → 사소함 순으로 순위가 매겨진 결과물을 반환하고, 각각 문제점, 클라이언트에게 중요한 이유, 구체적인 수정 방법(수정된 계약 표시)을 제시하십시오.

Individual skills in this repo

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

관련 스킬