# agussuroyo/wp-api-swaggerui architecture

> Architecture diagram of the GitHub repository agussuroyo/wp-api-swaggerui, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-29). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/agussuroyo/wp-api-swaggerui
- Repository: https://github.com/agussuroyo/wp-api-swaggerui

## Overview

WP API SwaggerUI is a WordPress plugin that exposes an interactive Swagger UI for registered REST API routes. Admins choose the API namespace, auth schemes, specification version, and contact-email visibility; visitors open the docs, fetch the generated schema, and can try supported REST methods. The documented schema pipeline converts WordPress route metadata to Swagger 2.0 and optionally OpenAPI 3.0.3, while docs assets support plain-permalink request rewriting. Authentication integrates with WordPress and WooCommerce; bearer-token validation is delegated to an optional token plugin. The main plugin and formatter excerpts are partial, so undocumented wiring is omitted.

Main entry points: [`wp-api-swaggerui.php`](https://github.com/agussuroyo/wp-api-swaggerui/blob/master/wp-api-swaggerui.php) (Plugin controller), [`swaggerauth.php`](https://github.com/agussuroyo/wp-api-swaggerui/blob/master/swaggerauth.php) (Auth handler), [`resources/js/app.js`](https://github.com/agussuroyo/wp-api-swaggerui/blob/master/resources/js/app.js) (Swagger UI client), [`swaggersetting.php`](https://github.com/agussuroyo/wp-api-swaggerui/blob/master/swaggersetting.php) (Settings handler)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_admin["Admin settings"]
  node_settings["Settings handler<br/>[swaggersetting.php]"]
  node_settings_view["Settings form<br/>[setting.php]"]
  node_options[("WordPress options")]
end

subgraph group_schema["Schema generation"]
  node_plugin["Plugin controller"]
  node_route_metadata["Route metadata"]
  node_schema_builder["Schema builder"]
  node_formatter["Spec formatter<br/>[swaggeropenapi.php]"]
  node_schema_endpoint["Schema endpoint"]
end

subgraph group_docs["Docs experience"]
  node_template["Docs template hooks"]
  node_docs_page["Docs page<br/>[single.php]"]
  node_swagger_js["Swagger UI client<br/>[app.js]"]
end

subgraph group_auth["Authentication"]
  node_auth["Auth handler<br/>[swaggerauth.php]"]
  node_request_bag["Request data bag<br/>[swaggerbag.php]"]
  node_woocommerce[("WooCommerce keys")]
  node_basic_auth["WordPress Basic auth"]
end

node_admin(("Administrator"))
node_visitor(("API docs user"))
node_wp["WordPress REST API"]
node_token["Token plugin"]

node_admin -->|"edits settings"| node_settings_view
node_settings_view -->|"submits form"| node_settings
node_settings -->|"saves options"| node_options
node_settings -->|"reads namespaces"| node_wp
node_visitor -->|"requests docs"| node_plugin
node_plugin -->|"registers endpoint"| node_schema_endpoint
node_plugin -->|"reads routes"| node_wp
node_wp -->|"provides routes"| node_route_metadata
node_schema_builder -->|"converts metadata"| node_route_metadata
node_plugin -->|"builds schema"| node_schema_builder
node_plugin -->|"formats schema"| node_formatter
node_formatter -->|"returns spec"| node_schema_endpoint
node_plugin -->|"reads configuration"| node_options
node_plugin -->|"serves docs hooks"| node_template
node_template -->|"selects template"| node_docs_page
node_template -->|"enqueues client"| node_swagger_js
node_visitor -->|"uses docs UI"| node_swagger_js
node_swagger_js -->|"fetches schema"| node_schema_endpoint
node_swagger_js -->|"sends REST requests"| node_wp
node_swagger_js -.->|"delegates token validation"| node_token
node_auth -->|"reads headers"| node_request_bag
node_auth -->|"checks consumer keys"| node_woocommerce
node_auth -->|"delegates Basic auth"| node_basic_auth
node_auth -->|"reads auth schemes"| node_options
node_auth -->|"adds security definitions"| node_formatter

click node_settings "https://github.com/agussuroyo/wp-api-swaggerui/blob/master/swaggersetting.php"
click node_settings_view "https://github.com/agussuroyo/wp-api-swaggerui/blob/master/template/setting.php"
click node_plugin "https://github.com/agussuroyo/wp-api-swaggerui/blob/master/wp-api-swaggerui.php"
click node_schema_builder "https://github.com/agussuroyo/wp-api-swaggerui/blob/master/wp-api-swaggerui.php"
click node_formatter "https://github.com/agussuroyo/wp-api-swaggerui/blob/master/swaggeropenapi.php"
click node_schema_endpoint "https://github.com/agussuroyo/wp-api-swaggerui/blob/master/wp-api-swaggerui.php"
click node_template "https://github.com/agussuroyo/wp-api-swaggerui/blob/master/swaggertemplate.php"
click node_docs_page "https://github.com/agussuroyo/wp-api-swaggerui/blob/master/template/single.php"
click node_swagger_js "https://github.com/agussuroyo/wp-api-swaggerui/blob/master/resources/js/app.js"
click node_auth "https://github.com/agussuroyo/wp-api-swaggerui/blob/master/swaggerauth.php"
click node_request_bag "https://github.com/agussuroyo/wp-api-swaggerui/blob/master/swaggerbag.php"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_settings,node_settings_view,node_options,node_visitor toneBlue
class node_plugin,node_route_metadata,node_schema_builder,node_formatter,node_schema_endpoint toneAmber
class node_template,node_docs_page,node_swagger_js,node_wp toneMint
class node_auth,node_request_bag,node_woocommerce,node_basic_auth toneRose
class node_admin,node_token toneIndigo
```

## Components

### Admin settings

- [Settings handler](https://github.com/agussuroyo/wp-api-swaggerui/blob/master/swaggersetting.php): `swaggersetting.php`
- [Settings form](https://github.com/agussuroyo/wp-api-swaggerui/blob/master/template/setting.php): `template/setting.php`
- **WordPress options**

### Schema generation

- [Plugin controller](https://github.com/agussuroyo/wp-api-swaggerui/blob/master/wp-api-swaggerui.php): `wp-api-swaggerui.php`
- **Route metadata**
- [Schema builder](https://github.com/agussuroyo/wp-api-swaggerui/blob/master/wp-api-swaggerui.php): `wp-api-swaggerui.php`
- [Spec formatter](https://github.com/agussuroyo/wp-api-swaggerui/blob/master/swaggeropenapi.php): `swaggeropenapi.php`
- [Schema endpoint](https://github.com/agussuroyo/wp-api-swaggerui/blob/master/wp-api-swaggerui.php): `wp-api-swaggerui.php`

### Docs experience

- [Docs template hooks](https://github.com/agussuroyo/wp-api-swaggerui/blob/master/swaggertemplate.php): `swaggertemplate.php`
- [Docs page](https://github.com/agussuroyo/wp-api-swaggerui/blob/master/template/single.php): `template/single.php`
- [Swagger UI client](https://github.com/agussuroyo/wp-api-swaggerui/blob/master/resources/js/app.js): `resources/js/app.js`

### Authentication

- [Auth handler](https://github.com/agussuroyo/wp-api-swaggerui/blob/master/swaggerauth.php): `swaggerauth.php`
- [Request data bag](https://github.com/agussuroyo/wp-api-swaggerui/blob/master/swaggerbag.php): `swaggerbag.php`
- **WooCommerce keys**
- **WordPress Basic auth**

### Other components

- **Administrator**
- **API docs user**
- **WordPress REST API**
- **Token plugin**

## Connections

- Administrator → Settings form: edits settings
- Settings form → Settings handler: submits form
- Settings handler → WordPress options: saves options
- Settings handler → WordPress REST API: reads namespaces
- API docs user → Plugin controller: requests docs
- Plugin controller → Schema endpoint: registers endpoint
- Plugin controller → WordPress REST API: reads routes
- WordPress REST API → Route metadata: provides routes
- Schema builder → Route metadata: converts metadata
- Plugin controller → Schema builder: builds schema
- Plugin controller → Spec formatter: formats schema
- Spec formatter → Schema endpoint: returns spec
- Plugin controller → WordPress options: reads configuration
- Plugin controller → Docs template hooks: serves docs hooks
- Docs template hooks → Docs page: selects template
- Docs template hooks → Swagger UI client: enqueues client
- API docs user → Swagger UI client: uses docs UI
- Swagger UI client → Schema endpoint: fetches schema
- Swagger UI client → WordPress REST API: sends REST requests
- Swagger UI client → Token plugin: delegates token validation
- Auth handler → Request data bag: reads headers
- Auth handler → WooCommerce keys: checks consumer keys
- Auth handler → WordPress Basic auth: delegates Basic auth
- Auth handler → WordPress options: reads auth schemes
- Auth handler → Spec formatter: adds security definitions
