Skill api-docs
Personaliza a documentação OpenAPI v3 para recursos do API Platform usando atributos, configuração YAML ou decorators de factory.
- Estrelas no GitHub
- 29
- Arquivos
- 1
- Último commit
- 22 de out. de 2026
- Licença
- —
- Ferramentas permitidas
- —
O que a skill api-docs faz?
api-docs é uma Agent Skill. Personaliza a documentação OpenAPI v3 para recursos do API Platform usando atributos, configuração YAML ou decorators de factory.
Resumo gerado a partir do SKILL.md da skill.
Sobre a skill api-docs
A função principal desta SKILL é modificar a documentação OpenAPI v3 para recursos do API Platform. Desenvolvedores a utilizam quando precisam refinar descrições de endpoints, adicionar exemplos de propriedades ou gerenciar como os recursos aparecem nas saídas do Swagger. Ela fornece a sintaxe e os padrões de configuração necessários para ambientes Symfony e Laravel, garantindo que a documentação da API reflita fielmente o código subjacente.
Um agente deve carregar esta SKILL quando um usuário solicitar alterações na documentação da API, como documentar um campo específico, ocultar uma operação ou adicionar descrições de resposta personalizadas. A SKILL oferece orientação sobre o uso de atributos PHP como ApiProperty e Post, configuração de informações globais via arquivos YAML ou PHP e a implementação de um decorator OpenApiFactory para mudanças em larga escala, como definir URLs de servidor personalizadas. Ela cobre tarefas técnicas específicas, como suprimir a geração de ID em objetos incorporados e definir parâmetros de header personalizados.
O que um agente pode fazer com ela
- 1Ocultar endpoints sensíveisEvita que operações específicas ou recursos inteiros apareçam na documentação OpenAPI gerada.
- 2Configurar metadados globais da APIDefine o título, a versão e os esquemas de segurança da API no nível da aplicação.
Escrito a partir do SKILL.md da skill. Cada caso de uso é verificado com uma citação dele.
Como instalar a skill api-docs
Cada comando copia a pasta da skill para o diretório de skills do cliente. Reinicie o cliente ou inicie uma nova sessão para carregá-la.Instalar a skill api-docs no Plugin
/plugin marketplace add api-platform/skillset /plugin install api-platform@api-platform-skillset
Instalar a skill api-docs no Claude Code
~/.claude/skills/api-docs/SKILL.md
$ npx degit api-platform/skillset/skills/api-docs ~/.claude/skills/api-docsInstalar a skill api-docs no Claude Code (project)
.claude/skills/api-docs/SKILL.md
$ npx degit api-platform/skillset/skills/api-docs .claude/skills/api-docsInstalar a skill api-docs no Codex
~/.agents/skills/api-docs/SKILL.md
$ npx degit api-platform/skillset/skills/api-docs ~/.agents/skills/api-docsInstalar a skill api-docs no Gemini CLI
~/.gemini/skills/api-docs/SKILL.md
$ npx degit api-platform/skillset/skills/api-docs ~/.gemini/skills/api-docsInstalar a skill api-docs no Claude.ai
npx degit api-platform/skillset/skills/api-docs api-docs && zip -r api-docs.zip api-docs # claude.ai → Customize → Skills → + → Create skill → Upload a skill → api-docs.zip
SKILL.md
Ver no GitHubCustomizing API Documentation
API Platform generates OpenAPI v3 documentation automatically. Customize it using attributes.
Global Info & Security Schemes (YAML)
Set the API-wide title, version, description and auth schemes in
config/packages/api_platform.yaml:
api_platform:
openapi:
info:
title: 'My API'
version: '1.0.0'
description: 'What this API does.'
components:
securitySchemes:
Bearer:
type: http
scheme: bearer
bearerFormat: JWT
Operation-Level Customization
use ApiPlatform\Metadata\Post;
use ApiPlatform\OpenApi\Model\Operation;
use ApiPlatform\OpenApi\Model\Response as OpenApiResponse;
#[Post(
openapi: new Operation(
summary: 'Create a new order',
description: 'Creates an order and sends confirmation email.',
responses: [
'201' => new OpenApiResponse(description: 'Order created successfully'),
'422' => new OpenApiResponse(description: 'Validation failed'),
]
)
)]
class Order {}
Property Documentation
use ApiPlatform\Metadata\ApiProperty;
class Order
{
#[ApiProperty(description: 'The unique identifier', example: 1)]
public int $id;
#[ApiProperty(
description: 'Current status',
example: 'pending',
openapiContext: ['enum' => ['pending', 'shipped', 'delivered']]
)]
public string $status;
#[ApiProperty(
genId: false,
types: ['https://schema.org/sender'],
openapiContext: [
'example' => ['address' => 'user@example.com', 'name' => 'John'],
],
)]
public Recipient $from;
}
Use genId: false on embedded objects (non-IRI properties) to suppress @id generation.
Hiding from Documentation
// Hide entire resource
#[ApiResource(openapi: false)]
// Hide specific operation
#[Get(openapi: false)]
// Hide from Hydra entrypoint only (keep in OpenAPI)
#[Get(hydra: false)]
Custom Parameters
use ApiPlatform\Metadata\HeaderParameter;
#[Post(
parameters: [
'X-Idempotency-Key' => new HeaderParameter(
description: 'Unique key to prevent duplicate processing',
required: true,
),
],
)]
OpenApiFactory Decorator (Global Customization)
Decorate the built-in factory for global changes like custom server URLs:
<?php
namespace App\OpenApi;
use ApiPlatform\OpenApi\Factory\OpenApiFactoryInterface;
use ApiPlatform\OpenApi\Model;
use ApiPlatform\OpenApi\OpenApi;
final class OpenApiFactory implements OpenApiFactoryInterface
{
public function __construct(
private readonly OpenApiFactoryInterface $decorated,
private readonly string $openapiUrl,
) {}
public function __invoke(array $context = []): OpenApi
{
$openApi = $this->decorated->__invoke($context);
return $openApi->withServers([
new Model\Server($this->openapiUrl),
]);
}
}
Register as a decorator in services.yaml:
App\OpenApi\OpenApiFactory:
decorates: 'api_platform.openapi.factory'
arguments:
$openapiUrl: '%env(OPENAPI_URL)%'
Laravel
All the attribute-level customization — operation openapi: new Operation(...),
#[ApiProperty] description/example/openapiContext, openapi: false, hydra: false,
HeaderParameter — is framework-neutral and works unchanged. Only the global pieces
differ:
- Global title/version/description are top-level keys in
config/api-platform.php('title','version','description'); there is noopenapi.infoYAML. Security schemes are configured under theswagger_uiblock (apiKeys,oauth,http_auth) in the same file, andopenapi.tagsis available there too. - To decorate the OpenAPI factory, bind your decorator in a service provider with the
container's
extend()(resolving the innerOpenApiFactoryInterface) instead of the Symfonydecorates:YAML — theOpenApiFactoryInterfaceandwithServers(...)API are identical.
Arquivos desta skill
1Perguntas sobre a skill api-docs
Como instalo a skill api-docs no Claude Code?
Execute npx degit api-platform/skillset/skills/api-docs ~/.claude/skills/api-docs. O Claude Code carrega skills de ~/.claude/skills (todos os projetos) ou .claude/skills (um projeto) e usa uma skill quando a descrição dela corresponde à tarefa.
Quais clientes podem usar a skill api-docs?
Qualquer cliente que leia o formato Agent Skills: Claude Code, Codex, Gemini CLI e claude.ai (envie como ZIP). Scripts da skill são executados apenas onde o cliente permite execução de código.
Como adiciono descrições ou exemplos personalizados a uma propriedade da API?
Use o atributo #[ApiProperty] para definir uma descrição, um valor de exemplo ou contexto adicional do OpenAPI.
Posso personalizar informações globais da API, como título e versão?
Sim, no Symfony você define isso em config/packages/api_platform.yaml sob a chave openapi.info, enquanto no Laravel elas são definidas em config/api-platform.php.
Como faço para suprimir a geração de @id para objetos incorporados?
Aplique genId: false à propriedade usando o atributo #[ApiProperty].