# swagger-api/swagger-petstore architecture

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

- Interactive diagram: https://gitdiagram.com/swagger-api/swagger-petstore
- Repository: https://github.com/swagger-api/swagger-petstore

## Overview

Swagger Petstore is a Java sample server implementing the OpenAPI Petstore API, with an interactive HTML UI. API clients invoke pet, store-order, and user operations; controllers validate requests, use in-memory data helpers, and return response entities. The README also identifies the OpenAPI definition and UI as product capabilities. Controller-to-data calls are evidenced by excerpts or the SOURCE INDEX; deployment routing and UI-to-server wiring are not shown in the sampled source.

Main entry points: [`src/main/java/io/swagger/petstore/controller/PetController.java`](https://github.com/swagger-api/swagger-petstore/blob/master/src/main/java/io/swagger/petstore/controller/PetController.java) (Pet operations), [`src/main/java/io/swagger/petstore/data/PetData.java`](https://github.com/swagger-api/swagger-petstore/blob/master/src/main/java/io/swagger/petstore/data/PetData.java) (Pet data), [`src/main/java/io/swagger/petstore/model/Pet.java`](https://github.com/swagger-api/swagger-petstore/blob/master/src/main/java/io/swagger/petstore/model/Pet.java) (Pet model), [`src/main/java/io/swagger/petstore/notification/Notifier.java`](https://github.com/swagger-api/swagger-petstore/blob/master/src/main/java/io/swagger/petstore/notification/Notifier.java) (Notifications)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["API operations"]
  node_petctl["Pet operations<br/>[PetController.java]"]
  node_orderctl["Order operations"]
  node_userctl["User operations"]
  node_exception["API exceptions<br/>[ApiException.java]"]
end

subgraph group_state["In-memory state"]
  node_petdata["Pet data<br/>[PetData.java]"]
  node_orderdata["Order data<br/>[OrderData.java]"]
  node_userdata["User data<br/>[UserData.java]"]
end

subgraph group_domain["Domain models"]
  node_petmodel["Pet model<br/>[Pet.java]"]
  node_category["Category model<br/>[Category.java]"]
  node_tag["Tag model<br/>[Tag.java]"]
  node_ordermodel["Order model<br/>[Order.java]"]
  node_usermodel["User model<br/>[User.java]"]
  node_apiresponse["API response model<br/>[ApiResponse.java]"]
end

subgraph group_interfaces["Product interfaces"]
  node_notifier["Notifications<br/>[Notifier.java]"]
  node_nullnotifier["Null notifier<br/>[NullNotifier.java]"]
  node_bugsnag["BugSnag notifier"]
  node_openapi["OpenAPI definition<br/>[openapi.yaml]"]
  node_ui["Interactive API UI<br/>[index.html]"]
  node_service["Petstore server<br/>[web.xml]"]
end

node_client(("API client"))

node_client -.->|"invokes pet API"| node_petctl
node_client -.->|"invokes order API"| node_orderctl
node_client -.->|"invokes user API"| node_userctl
node_petctl -->|"calls"| node_petdata
node_orderctl -->|"calls"| node_orderdata
node_userctl -->|"calls"| node_userdata
node_petdata -->|"stores"| node_petmodel
node_petdata -->|"creates"| node_category
node_petdata -->|"creates"| node_tag
node_orderdata -->|"stores"| node_ordermodel
node_userdata -->|"stores"| node_usermodel
node_petctl -->|"notifies"| node_notifier
node_petctl -->|"defaults to"| node_nullnotifier
node_bugsnag -->|"implements"| node_notifier
node_nullnotifier -->|"implements"| node_notifier
node_petmodel -->|"contains"| node_category
node_petmodel -->|"contains"| node_tag
node_client -->|"uses interface"| node_ui
node_openapi -.->|"defines API for"| node_service
node_client -.->|"accesses"| node_service

click node_petctl "https://github.com/swagger-api/swagger-petstore/blob/master/src/main/java/io/swagger/petstore/controller/PetController.java"
click node_orderctl "https://github.com/swagger-api/swagger-petstore/blob/master/src/main/java/io/swagger/petstore/controller/OrderController.java"
click node_userctl "https://github.com/swagger-api/swagger-petstore/blob/master/src/main/java/io/swagger/petstore/controller/UserController.java"
click node_petdata "https://github.com/swagger-api/swagger-petstore/blob/master/src/main/java/io/swagger/petstore/data/PetData.java"
click node_orderdata "https://github.com/swagger-api/swagger-petstore/blob/master/src/main/java/io/swagger/petstore/data/OrderData.java"
click node_userdata "https://github.com/swagger-api/swagger-petstore/blob/master/src/main/java/io/swagger/petstore/data/UserData.java"
click node_petmodel "https://github.com/swagger-api/swagger-petstore/blob/master/src/main/java/io/swagger/petstore/model/Pet.java"
click node_category "https://github.com/swagger-api/swagger-petstore/blob/master/src/main/java/io/swagger/petstore/model/Category.java"
click node_tag "https://github.com/swagger-api/swagger-petstore/blob/master/src/main/java/io/swagger/petstore/model/Tag.java"
click node_ordermodel "https://github.com/swagger-api/swagger-petstore/blob/master/src/main/java/io/swagger/petstore/model/Order.java"
click node_usermodel "https://github.com/swagger-api/swagger-petstore/blob/master/src/main/java/io/swagger/petstore/model/User.java"
click node_apiresponse "https://github.com/swagger-api/swagger-petstore/blob/master/src/main/java/io/swagger/petstore/model/ApiResponse.java"
click node_exception "https://github.com/swagger-api/swagger-petstore/blob/master/src/main/java/io/swagger/petstore/exception/ApiException.java"
click node_notifier "https://github.com/swagger-api/swagger-petstore/blob/master/src/main/java/io/swagger/petstore/notification/Notifier.java"
click node_nullnotifier "https://github.com/swagger-api/swagger-petstore/blob/master/src/main/java/io/swagger/petstore/notification/NullNotifier.java"
click node_bugsnag "https://github.com/swagger-api/swagger-petstore/blob/master/src/main/java/io/swagger/petstore/notification/BugSnagNotifier.java"
click node_openapi "https://github.com/swagger-api/swagger-petstore/blob/master/src/main/resources/openapi.yaml"
click node_ui "https://github.com/swagger-api/swagger-petstore/blob/master/src/main/webapp/index.html"
click node_service "https://github.com/swagger-api/swagger-petstore/blob/master/src/main/webapp/WEB-INF/web.xml"

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_petctl,node_orderctl,node_userctl,node_exception,node_client toneBlue
class node_petdata,node_orderdata,node_userdata toneAmber
class node_petmodel,node_category,node_tag,node_ordermodel,node_usermodel,node_apiresponse toneMint
class node_notifier,node_nullnotifier,node_bugsnag,node_openapi,node_ui,node_service toneRose
```

## Components

### API operations

- [Pet operations](https://github.com/swagger-api/swagger-petstore/blob/master/src/main/java/io/swagger/petstore/controller/PetController.java): `src/main/java/io/swagger/petstore/controller/PetController.java`
- [Order operations](https://github.com/swagger-api/swagger-petstore/blob/master/src/main/java/io/swagger/petstore/controller/OrderController.java): `src/main/java/io/swagger/petstore/controller/OrderController.java`
- [User operations](https://github.com/swagger-api/swagger-petstore/blob/master/src/main/java/io/swagger/petstore/controller/UserController.java): `src/main/java/io/swagger/petstore/controller/UserController.java`
- [API exceptions](https://github.com/swagger-api/swagger-petstore/blob/master/src/main/java/io/swagger/petstore/exception/ApiException.java): `src/main/java/io/swagger/petstore/exception/ApiException.java`

### In-memory state

- [Pet data](https://github.com/swagger-api/swagger-petstore/blob/master/src/main/java/io/swagger/petstore/data/PetData.java): `src/main/java/io/swagger/petstore/data/PetData.java`
- [Order data](https://github.com/swagger-api/swagger-petstore/blob/master/src/main/java/io/swagger/petstore/data/OrderData.java): `src/main/java/io/swagger/petstore/data/OrderData.java`
- [User data](https://github.com/swagger-api/swagger-petstore/blob/master/src/main/java/io/swagger/petstore/data/UserData.java): `src/main/java/io/swagger/petstore/data/UserData.java`

### Domain models

- [Pet model](https://github.com/swagger-api/swagger-petstore/blob/master/src/main/java/io/swagger/petstore/model/Pet.java): `src/main/java/io/swagger/petstore/model/Pet.java`
- [Category model](https://github.com/swagger-api/swagger-petstore/blob/master/src/main/java/io/swagger/petstore/model/Category.java): `src/main/java/io/swagger/petstore/model/Category.java`
- [Tag model](https://github.com/swagger-api/swagger-petstore/blob/master/src/main/java/io/swagger/petstore/model/Tag.java): `src/main/java/io/swagger/petstore/model/Tag.java`
- [Order model](https://github.com/swagger-api/swagger-petstore/blob/master/src/main/java/io/swagger/petstore/model/Order.java): `src/main/java/io/swagger/petstore/model/Order.java`
- [User model](https://github.com/swagger-api/swagger-petstore/blob/master/src/main/java/io/swagger/petstore/model/User.java): `src/main/java/io/swagger/petstore/model/User.java`
- [API response model](https://github.com/swagger-api/swagger-petstore/blob/master/src/main/java/io/swagger/petstore/model/ApiResponse.java): `src/main/java/io/swagger/petstore/model/ApiResponse.java`

### Product interfaces

- [Notifications](https://github.com/swagger-api/swagger-petstore/blob/master/src/main/java/io/swagger/petstore/notification/Notifier.java): `src/main/java/io/swagger/petstore/notification/Notifier.java`
- [Null notifier](https://github.com/swagger-api/swagger-petstore/blob/master/src/main/java/io/swagger/petstore/notification/NullNotifier.java): `src/main/java/io/swagger/petstore/notification/NullNotifier.java`
- [BugSnag notifier](https://github.com/swagger-api/swagger-petstore/blob/master/src/main/java/io/swagger/petstore/notification/BugSnagNotifier.java): `src/main/java/io/swagger/petstore/notification/BugSnagNotifier.java`
- [OpenAPI definition](https://github.com/swagger-api/swagger-petstore/blob/master/src/main/resources/openapi.yaml): `src/main/resources/openapi.yaml`
- [Interactive API UI](https://github.com/swagger-api/swagger-petstore/blob/master/src/main/webapp/index.html): `src/main/webapp/index.html`
- [Petstore server](https://github.com/swagger-api/swagger-petstore/blob/master/src/main/webapp/WEB-INF/web.xml): `src/main/webapp/WEB-INF/web.xml`

### Other components

- **API client**

## Connections

- API client → Pet operations: invokes pet API
- API client → Order operations: invokes order API
- API client → User operations: invokes user API
- Pet operations → Pet data: calls (evidence: `src/main/java/io/swagger/petstore/controller/PetController.java`)
- Order operations → Order data: calls (evidence: `src/main/java/io/swagger/petstore/controller/OrderController.java`)
- User operations → User data: calls (evidence: `src/main/java/io/swagger/petstore/controller/UserController.java`)
- Pet data → Pet model: stores (evidence: `src/main/java/io/swagger/petstore/data/PetData.java`)
- Pet data → Category model: creates (evidence: `src/main/java/io/swagger/petstore/data/PetData.java`)
- Pet data → Tag model: creates (evidence: `src/main/java/io/swagger/petstore/data/PetData.java`)
- Order data → Order model: stores (evidence: `src/main/java/io/swagger/petstore/data/OrderData.java`)
- User data → User model: stores (evidence: `src/main/java/io/swagger/petstore/data/UserData.java`)
- Pet operations → Notifications: notifies (evidence: `src/main/java/io/swagger/petstore/controller/PetController.java`)
- Pet operations → Null notifier: defaults to (evidence: `src/main/java/io/swagger/petstore/controller/PetController.java`)
- BugSnag notifier → Notifications: implements (evidence: `src/main/java/io/swagger/petstore/notification/BugSnagNotifier.java`)
- Null notifier → Notifications: implements (evidence: `src/main/java/io/swagger/petstore/notification/NullNotifier.java`)
- Pet model → Category model: contains (evidence: `src/main/java/io/swagger/petstore/model/Pet.java`)
- Pet model → Tag model: contains (evidence: `src/main/java/io/swagger/petstore/model/Pet.java`)
- API client → Interactive API UI: uses interface (evidence: `README.md`)
- OpenAPI definition → Petstore server: defines API for
- API client → Petstore server: accesses
