Drupal is a registered trademark of Dries Buytaert

swagger_php

7 sites Security covered
View on drupal.org

This module uses the zircote/swagger-php library to let you document your
Drupal code, and generate an OpenAPI 3 specification and documentation UI, based on those PHP attributes.

Installation

  • Install this module and its dependencies via Composer.
  • Install the swagger-api/swagger-ui library in your /libraries folder.

    See https://www.drupal.org/project/openapi_ui_swagger#installation-composer
  • Enable the swagger_php module
  • Use the zircote/swagger-php library PHP attributes to document your API,
    e.g. a custom RestResource plugin you have created.

Example usage

Say we have created a custom RestResource plugin, and want to document this API endpoint via the OpenAPI 3 specification.


namespace Drupal\my_custom_api\Plugin\rest\resource;

use Drupal\Core\StringTranslation\TranslatableMarkup;
use Drupal\rest\Attribute\RestResource;
use Drupal\rest\ModifiedResourceResponse;
use Drupal\rest\Plugin\ResourceBase;
use OpenApi\Attributes as OA;

/**
 * My custom API endpoint.
 */
#[OA\Info(
  version: "1.0.0",
  description: "API documentation for my custom API",
  title: "My Custom API"
)]
#[RestResource(
  id: 'my_custom_resource',
  label: new TranslatableMarkup('Custom API endpoint to send data to.'),
  uri_paths: [
    'create' => '/api/v1/custom/add',
  ],
)]
class MyCustomResource extends ResourceBase {

  /**
   * Responds to POST requests and saves the data.
   */
  #[OA\Post(path: '/api/v1/custom/add', operationId: 'my_custom_resource_add')]
  #[OA\Response(response: '200', description: 'The processed data')]
  public function post(array $data): ModifiedResourceResponse {}

}

This renders the following API documentation page + an OpenAPI 3 compatible JSON specification file:

More information: https://zircote.github.io/swagger-php/

Activity

Total releases
4
First release
Nov 2025
Latest release
3 months ago
Release cadence
0 days
Stability
0% stable

Release Timeline

Releases

Version Type Release date
1.0.0-alpha3 Pre-release Nov 20, 2025
1.0.0-alpha2 Pre-release Nov 19, 2025
1.0.x-dev Dev Nov 19, 2025
1.0.0-alpha1 Pre-release Nov 19, 2025