Drupal is a registered trademark of Dries Buytaert
Protected Pages 3.0.0 Major update available for module protected_pages (3.0.0). Commerce Core 3.3.8 Minor update available for module commerce (3.3.8). Search API HTML Element Filter 1.0.7 Minor update available for module search_api_html_element_filter (1.0.7). Layout Builder Reorder 2.0.1 Minor update available for module layout_builder_reorder (2.0.1). Ban 1.1.0 Minor update available for module ban (1.1.0). Field Formatter Range 2.0.0 Major update available for module field_formatter_range (2.0.0). Field Formatter Range 8.x-1.8 Minor update available for module field_formatter_range (8.x-1.8). Varbase Media Header 9.2.1 Minor update available for module varbase_media_header (9.2.1). Search API Solr 4.3.11 Module search_api_solr updated after 14 months of inactivity (4.3.11). Provus Mega Menu Module provus_mega_menu crossed 1,000 active installs.

This module enables you to document your Drupal code using PHP attributes. It then generates an OpenAPI 3 specification and a documentation user interface based on these attributes.

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
7 months ago
Releases (12 mo)
4 ▲ from 0
Maintenance
Slowing

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