Skill api-docs
Personaliza la documentación de OpenAPI v3 para recursos de API Platform mediante atributos, configuración YAML o decoradores de fábrica.
- Estrellas en GitHub
- 29
- Archivos
- 1
- Último commit
- 22 oct 2026
- Licencia
- —
- Herramientas permitidas
- —
¿Qué hace la skill api-docs?
api-docs es una agent skill. Personaliza la documentación de OpenAPI v3 para recursos de API Platform mediante atributos, configuración YAML o decoradores de fábrica.
Resumen generado a partir del SKILL.md de la skill.
Sobre la skill api-docs
La función principal de este SKILL es modificar la documentación OpenAPI v3 para recursos de API Platform. Los desarrolladores lo utilizan cuando necesitan refinar las descripciones de los endpoints, añadir ejemplos de propiedades o gestionar cómo aparecen los recursos en las salidas de Swagger. Proporciona la sintaxis y los patrones de configuración necesarios tanto para entornos Symfony como Laravel para asegurar que la documentación de la API refleje fielmente el código subyacente.
Un agente debe cargar este SKILL cuando un usuario solicite cambios en la documentación de la API, como documentar un campo específico, ocultar una operación o añadir descripciones de respuesta personalizadas. El SKILL ofrece orientación sobre el uso de atributos de PHP como ApiProperty y Post, la configuración de información global mediante archivos YAML o PHP, y la implementación de un decorador OpenApiFactory para cambios a gran escala, como establecer URLs de servidor personalizadas. Cubre tareas técnicas específicas como la supresión de la generación de ID en objetos embebidos y la definición de parámetros de cabecera personalizados.
Lo que un agente puede hacer con ella
- 1Ocultar endpoints sensiblesEvita que operaciones específicas o recursos completos aparezcan en la documentación OpenAPI generada.
- 2Configurar metadatos globales de la APIEstablece el título, la versión y los esquemas de seguridad de la API a nivel de aplicación.
Escrito a partir del SKILL.md de la skill. Cada caso de uso se verifica con una cita del mismo.
Cómo instalar la skill api-docs
Cada comando copia la carpeta de la skill al directorio de skills del cliente. Reinicia el cliente o inicia una nueva sesión para cargarla.Instalar la skill api-docs en Plugin
/plugin marketplace add api-platform/skillset /plugin install api-platform@api-platform-skillset
Instalar la skill api-docs en Claude Code
~/.claude/skills/api-docs/SKILL.md
$ npx degit api-platform/skillset/skills/api-docs ~/.claude/skills/api-docsInstalar la skill api-docs en Claude Code (project)
.claude/skills/api-docs/SKILL.md
$ npx degit api-platform/skillset/skills/api-docs .claude/skills/api-docsInstalar la skill api-docs en Codex
~/.agents/skills/api-docs/SKILL.md
$ npx degit api-platform/skillset/skills/api-docs ~/.agents/skills/api-docsInstalar la skill api-docs en Gemini CLI
~/.gemini/skills/api-docs/SKILL.md
$ npx degit api-platform/skillset/skills/api-docs ~/.gemini/skills/api-docsInstalar la skill api-docs en 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 en 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.
Archivos de esta skill
1Preguntas sobre la skill api-docs
¿Cómo instalo la skill api-docs en Claude Code?
Ejecuta npx degit api-platform/skillset/skills/api-docs ~/.claude/skills/api-docs. Claude Code carga las skills desde ~/.claude/skills (todos los proyectos) o .claude/skills (un proyecto) y usa una skill cuando su descripción coincide con la tarea.
¿Qué clientes pueden usar la skill api-docs?
Cualquier cliente que lea el formato Agent Skills: Claude Code, Codex, Gemini CLI y claude.ai (subir como ZIP). Los scripts de la skill se ejecutan solo donde el cliente permite la ejecución de código.
¿Cómo añado descripciones o ejemplos personalizados a una propiedad de la API?
Usa el atributo #[ApiProperty] para definir una descripción, un valor de ejemplo o contexto adicional de OpenAPI.
¿Puedo personalizar la información global de la API, como el título y la versión?
Sí, en Symfony se configuran en config/packages/api_platform.yaml bajo la clave openapi.info, mientras que en Laravel se definen en config/api-platform.php.
¿Cómo suprimo la generación de @id para objetos embebidos?
Aplica genId: false a la propiedad utilizando el atributo #[ApiProperty].