Initial Commit Doku

This commit is contained in:
Christian Alzer 2023-12-08 09:31:38 +00:00
parent 07cc6c7d24
commit b67ab7fd35
10 changed files with 30588 additions and 0 deletions

359
api.yaml Normal file
View File

@ -0,0 +1,359 @@
openapi: 3.0.0
servers:
- url: //hombach.de/api
description: Hombach WT 20
info:
description: |
# Introduction
Diese Dokumentation beschreibt die Modelle und SChnittstellen der WT 20 API von Hombach. Mit dieser können Wärmeübertrager
ausgelegt und nachgerechnet werden.
*Diese Dokumentation ist momentan noch WIP*
version: 0.1.0
title: WT 20 API
termsOfService: 'http://hombach.de'
contact:
name: API Support
email: info@hombach.de
url: https://hombach.de/api/doc
license:
name: proprietary
tags:
- name: Hilfe
description: Hilfe mit der API
- name: Berechnung
description: Berechnung von Wärmeübertragern
- name: geo
x-displayName: Das Geometrie-Modell
description: |
<SchemaDefinition schemaRef="#/components/schemas/geo" />
- name: betrp
x-displayName: Das Betriebspunkt-Modell
description: |
<SchemaDefinition schemaRef="#/components/schemas/betrp" />
x-tagGroups:
- name: Hilfe
tags:
- Hilfe
- name: Berechnung
tags:
- Berechnung
paths:
/help:
get:
tags:
- Hilfe
summary: Liefert eine Hilfs-Übersicht der API
description: Liefert einige mögliche Werte für den Parameter "command". Identisch mit "command":"help"
responses:
'200':
description: successful operation
content:
application/json:
schema:
type: object
minProperties: 2
additionalProperties:
type: string
'/help/{query}':
get:
tags:
- Hilfe
summary: Auflistung Werte für einen Parameter
description: Liefert eine Liste möglicher Werte für den abgefragten Parameter
parameters:
- name: query
in: path
desciption: Abzufragender Parameter
required: true
schema:
$ref: '#/components/schemas/mode'
responses:
'200':
description: successful operation
example:
- key: 22
name: 22
mat_key: Cu
diameter: 22
nenndurchmesser: DN 20
thickness: 1.5
- key: 28
name: 28
mat_key: Cu
diameter: 28
nenndurchmesser: DN 25
thickness: 1.5
content:
application/json:
schema:
$ref: '#/components/schemas/mode'
components:
schemas:
ApiResponse:
type: object
properties:
code:
type: integer
format: int32
type:
type: string
message:
type: string
mode:
type: string
description: Das Kommando, mit dem die API angesprochen wird
example: query_sam
enum:
- help
- query_med
- query_kmed
- query_ansch_typ
- query_lam
- query_mat
- query_rohr
- query_sam
- query_calc_options
- query_baugr
- query_dim
- query_keys
- query_keys_export
command:
type: string
description: Das Kommando, mit dem die API angesprochen wird
example: help
enum:
- auslegung
- nachrechnung
- reserve
- abort
kind:
type: string
description: Das Kommando, mit dem die Berechnungsmethode der API bestimmt wird
example: direktverdampfer
default: wt
enum:
- wt
- direktverdampfer
- verflüssiger
- umkehrbetrieb
geo:
type: object
description: Definiert die Ausführung (die Geometrie) des Wärmeübertragers
required:
- lb
- hb
- rohr_key
- lam_key
discriminator:
propertyName: ^geoType
mapping:
WT: '#/components/schemas/geoWT'
DV: '#/components/schemas/geoDV'
VF: '#/components/schemas/geoVF'
properties:
lb:
description: Berippte/lichte Breite
type: number
minimum: 125
maximum: 5200
example: 920
hb:
description: Berippte/lichte Höhe
type: number
minimum: 125
maximum: 2880
example: 600
rohr_key:
description: Zu verwendendes Rohr
type: string
example:
- key: C12x0.35
- key: C9.5x0.3
Kreise_fixed:
type: boolean
description: true, wenn die Anzahl der Kreise vorgegeben werden soll
default: false
Kreise:
type: integer
description: Anzahl der Kreise. Wird berechnet, wenn Kreise_fixed=false
allowEmptyValue: true
example: 8
lam_key:
description: Zu verwendende Lamelle
type: string
example:
- key: 12:30x26v1
- key: 9.5:25x22v1
lam_abst_fixed:
type: boolean
description: true, wenn Lamellenabstand vorgegeben werden soll
default: false
lam_abst:
type: number
description: Lamellenabstand (mm). Wird berechnet, wenn lam_abst_fixed=false
allowEmptyValue: true
example: 2.5
teile:
type: integer
description: Anzahl der Teile des Wärmeübertragers,
example: 1
default: 1
RR_fixed:
type: boolean
description: true, wenn die Anzahl der Rohrreihen vorgegeben werden soll
default: false
RR:
type: integer
description: Anzahl der Rohrreihen. Wird berechnet, wenn RR_fixed=false
example: 6
allowEmptyValue: true
geoWT:
description: Definiert die Ausführung (die Geometrie) eines Wasser/Sole Wärmeübertragers
allOf:
- $ref: '#/components/schemas/geo'
- type: object
properties:
sam_fixed :
type: boolean
description: true, wenn der Sammlerdurchmesser vorgegeben werden soll
default: false
sammler_key :
description: Zu verwendender Sammlerdurchmesser
type: string
example:
- key: 28
- key: 32
geoDV:
description: Definiert die Ausführung (die Geometrie) eines Direktverdampfers
allOf:
- $ref: '#/components/schemas/geo'
- type: object
properties:
anz_med_kreise:
type: integer
description: Anzahl separater Kältekreise
default: 1
example: 2
sam_fixed :
type: boolean
description: true, wenn die Sammlerdurchmesser vorgegeben werden sollen
default: false
sammler_key :
description: Zu verwendende Sammlerdurchmesser
type: string
example:
- key: 28
- key: 32
betrp:
type: object
description: Ein Betriebspunkt eines Wärmeübertragers
required:
- select_luftstrom
- luft_temp_ein
- select_FLE
properties:
select_luftstrom:
type: integer
description: |
Gibt an in welcher Einheit der Luftstrom vorgegeben wird.
* `0` für Luftvolumenstrom (m³/h)
* `1` für Luftmassenstrom (kg/h)
default: 0
luft_volstrom_bez:
type: number
description: Vorgabe des Luftvolumenstroms bei Bezugsdichte (m³/h), wenn `"select_luftstrom":"0"`
example: 6000
luft_masstrom_feucht:
type: number
description: Vorgabe des feuchten Luftmassenstroms (kg/h), wenn `"select_luftstrom":"1"`
example: 7200
luft_temp_ein:
type: number
description: Lufttemperatur (°C) am Eintritt
example: 32
luft_temp_aus:
type: number
description: |
**Erforlderlich für Auslegung**
Lufttemperatur (°C) am Austritt
example: 16
select_FLE:
type: integer
description: |
Gibt an in welcher Einheit die Luftfeuchtigkeit vorgegeben wird.
* `0` für relative Feuchte (%)
* `1` für absolute feuchte (g/kg)
default: 0
luft_relfeu_ein:
type: number
description: Relative Feuchte (%) der Luft am Eintritt
example: 40
luft_absfeu_ein:
type: number
description: Absolute Feuchte (g/kg) der Luft am Eintritt
example: 10.6
betrpWT:
description: Definiert einen Betriebspunkt eines Wasser/Sole Wärmeübertragers
allOf:
- $ref: '#/components/schemas/betrp'
- type: object
required:
- med_key
- med_temp_ein
properties:
med_key:
type: string
description: Gibt an, welches Medium zu verwenden ist
example:
- wasser
- Antifrogen N
med_konz:
type: number
description: Konzentration (%) des Frostschutzmittels
example: 34
med_temp_ein:
type: number
description: Vorlauftemperatur (°C) des Mediums
example: 6
med_temp_aus:
type: number
description: Rücklauftemperatur (°C) des Mediums
example: 12
med_volstrom:
type: number
description: |
**Erforderlich bei Nachrechnung und Reserve**
Volumenstrom (L/h) des Mediums
example: 3400
med_masstrom:
type: number
description: |
**Erforderlich bei Nachrechnung und Reserve**
Massenstrom (kg/h) des Mediums
example: 3400
select_KA:
type: integer
description: |
**Erforderlich bei Nachrechnung und Reserve**
Gibt an in welcher Einheit der Mediumstrom vorgegeben wird.
* `0` für Volumenstrom (L/h)
* `1` für Massenstrom (kg/h)
default: 0
requestBodies:
securitySchemes:
api_key:
description: >
For this sample, you can use the api key `special-key` to test the
authorization filters.
type: apiKey
name: api_key
in: header
examples:
geo:
value:
lb: 920
hb: 600
rohr_key: C9.5x0.3
lam_key: 9.5:25x22v1

27363
big-openapi.json Normal file

File diff suppressed because it is too large Load Diff

27
index.html Normal file
View File

@ -0,0 +1,27 @@
<!DOCTYPE html>
<html>
<head>
<title>Redoc</title>
<!-- needed for adaptive design -->
<meta charset="utf-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link href="https://fonts.googleapis.com/css?family=Montserrat:300,400,700|Roboto:300,400,700" rel="stylesheet">
<!--
Redoc doesn't change outer page styles
-->
<style>
body {
margin: 0;
padding: 0;
}
</style>
</head>
<body>
<redoc spec-url=https://git.hombach.de/Hombach-WT/WT-20/src/branch/master/api.yaml></redoc>
<script src="https://cdn.redoc.ly/redoc/latest/bundles/redoc.standalone.js"> </script>
</body>
</html>

210
index.tsx Normal file
View File

@ -0,0 +1,210 @@
import * as React from 'react';
import { render } from 'react-dom';
import styled from 'styled-components';
import { RedocStandalone } from '../src';
import ComboBox from './ComboBox';
import FileInput from './components/FileInput';
const DEFAULT_SPEC = 'openapi.yaml';
const NEW_VERSION_SPEC = 'openapi-3-1.yaml';
const demos = [
{ value: NEW_VERSION_SPEC, label: 'Petstore OpenAPI 3.1' },
{ value: 'https://api.apis.guru/v2/specs/instagram.com/1.0.0/swagger.yaml', label: 'Instagram' },
{
value: 'https://api.apis.guru/v2/specs/googleapis.com/calendar/v3/openapi.yaml',
label: 'Google Calendar',
},
{ value: 'https://api.apis.guru/v2/specs/slack.com/1.7.0/openapi.yaml', label: 'Slack' },
{ value: 'https://api.apis.guru/v2/specs/zoom.us/2.0.0/openapi.yaml', label: 'Zoom.us' },
];
class DemoApp extends React.Component<
Record<string, unknown>,
{ spec: object | undefined; specUrl: string; dropdownOpen: boolean; cors: boolean }
> {
constructor(props) {
super(props);
let parts = window.location.search.match(/url=([^&]+)/);
let url = DEFAULT_SPEC;
if (parts && parts.length > 1) {
url = decodeURIComponent(parts[1]);
}
parts = window.location.search.match(/[?&]nocors(&|#|$)/);
let cors = true;
if (parts && parts.length > 1) {
cors = false;
}
this.state = {
spec: undefined,
specUrl: url,
dropdownOpen: false,
cors,
};
}
handleUploadFile = (spec: object) => {
this.setState({
spec,
specUrl: '',
});
};
handleChange = (url: string) => {
if (url === NEW_VERSION_SPEC) {
this.setState({ cors: false });
0;
}
this.setState({
specUrl: url,
});
window.history.pushState(
undefined,
'',
updateQueryStringParameter(location.search, 'url', url),
);
};
toggleCors = (e: React.ChangeEvent<HTMLInputElement>) => {
const cors = e.currentTarget.checked;
this.setState({
cors,
});
window.history.pushState(
undefined,
'',
updateQueryStringParameter(location.search, 'nocors', cors ? undefined : ''),
);
};
render() {
const { specUrl, cors } = this.state;
let proxiedUrl = specUrl;
if (specUrl !== DEFAULT_SPEC) {
proxiedUrl = cors
? 'https://cors.redoc.ly/' + new URL(specUrl, window.location.href).href
: specUrl;
}
return (
<>
<Heading>
<a href=".">
<Logo
src="https://github.com/Redocly/redoc/raw/main/docs/images/redoc.png"
alt="Redoc logo"
/>
</a>
<ControlsContainer>
<FileInput onUpload={this.handleUploadFile} />
<ComboBox
placeholder={'URL to a spec to try'}
options={demos}
onChange={this.handleChange}
value={specUrl === DEFAULT_SPEC ? '' : specUrl}
/>
<CorsCheckbox title="Use CORS proxy">
<input id="cors_checkbox" type="checkbox" onChange={this.toggleCors} checked={cors} />
<label htmlFor="cors_checkbox">CORS</label>
</CorsCheckbox>
</ControlsContainer>
<iframe
src="https://ghbtns.com/github-btn.html?user=Redocly&amp;repo=redoc&amp;type=star&amp;count=true&amp;size=large"
frameBorder="0"
scrolling="0"
width="160px"
height="30px"
/>
</Heading>
<RedocStandalone
spec={this.state.spec}
specUrl={proxiedUrl}
options={{ scrollYOffset: 'nav', untrustedSpec: true }}
/>
</>
);
}
}
/* ====== Styled components ====== */
const ControlsContainer = styled.div`
display: flex;
justify-content: center;
flex: 1;
margin: 0 15px;
align-items: center;
`;
const CorsCheckbox = styled.div`
margin-left: 10px;
white-space: nowrap;
label {
font-size: 13px;
}
@media screen and (max-width: 550px) {
display: none;
}
`;
const Heading = styled.nav`
position: sticky;
top: 0;
width: 100%;
height: 50px;
box-sizing: border-box;
background: white;
border-bottom: 1px solid #cccccc;
z-index: 10;
padding: 5px;
display: flex;
align-items: center;
font-family: Roboto, sans-serif;
`;
const Logo = styled.img`
height: 40px;
width: 124px;
display: inline-block;
margin-right: 15px;
@media screen and (max-width: 950px) {
display: none;
}
`;
render(<DemoApp />, document.getElementById('container'));
/* ====== Helpers ====== */
function updateQueryStringParameter(uri, key, value) {
const keyValue = value === '' ? key : key + '=' + value;
const re = new RegExp('([?|&])' + key + '=?.*?(&|#|$)', 'i');
if (uri.match(re)) {
if (value !== undefined) {
return uri.replace(re, '$1' + keyValue + '$2');
} else {
return uri.replace(re, (_, separator: string, rest: string) => {
if (rest.startsWith('&')) {
rest = rest.substring(1);
}
return separator === '&' ? rest : separator + rest;
});
}
} else {
if (value === undefined) {
return uri;
}
let hash = '';
if (uri.indexOf('#') !== -1) {
hash = uri.replace(/.*#/, '#');
uri = uri.replace(/#.*/, '');
}
const separator = uri.indexOf('?') !== -1 ? '&' : '?';
return uri + separator + keyValue + hash;
}
}

1359
openapi-3-1.yaml Normal file

File diff suppressed because it is too large Load Diff

276
openapi.yaml Normal file
View File

@ -0,0 +1,276 @@
{
"openapi": "3.0.0",
"info": {
"title": "WT 20 API",
"description": "This is a sample server Petstore server.\nYou can find out more about Swagger at\n[http://swagger.io](http://swagger.io) or on [irc.freenode.net, #swagger](http://swagger.io/irc/).\nFor this sample, you can use the api key `special-key` to test the authorization filters.\n\n# Introduction\nThis API is documented in **OpenAPI format** and is based on\n[Petstore sample](http://petstore.swagger.io/) provided by [swagger.io](http://swagger.io) team.\nIt was **extended** to illustrate features of [generator-openapi-repo](https://github.com/Rebilly/generator-openapi-repo)\ntool and [ReDoc](https://github.com/Redocly/redoc) documentation. In addition to standard\nOpenAPI syntax we use a few [vendor extensions](https://github.com/Redocly/redoc/blob/main/docs/redoc-vendor-extensions.md).\n\n# OpenAPI Specification\nThis API is documented in **OpenAPI format** and is based on\n[Petstore sample](http://petstore.swagger.io/) provided by [swagger.io](http://swagger.io) team.\nIt was **extended** to illustrate features of [generator-openapi-repo](https://github.com/Rebilly/generator-openapi-repo)\ntool and [ReDoc](https://github.com/Redocly/redoc) documentation. In addition to standard\nOpenAPI syntax we use a few [vendor extensions](https://github.com/Redocly/redoc/blob/main/docs/redoc-vendor-extensions.md).\n\n# Cross-Origin Resource Sharing\nThis API features Cross-Origin Resource Sharing (CORS) implemented in compliance with [W3C spec](https://www.w3.org/TR/cors/).\nAnd that allows cross-domain communication from the browser.\nAll responses have a wildcard same-origin which makes them completely public and accessible to everyone, including any code on any site.\n\n# Authentication\n\nPetstore offers two forms of authentication:\n - API Key\n - OAuth2\nOAuth2 - an open protocol to allow secure authorization in a simple\nand standard method from web, mobile and desktop applications.\n\n<SecurityDefinitions />\n",
"termsOfService": "http://hombach.de",
"contact": {
"name": "API Support",
"url": "https://hombach.de/api/doc",
"email": "info@hombach.de"
},
"license": {
"name": "proprietary"
},
"version": "0.1.0"
},
"servers": [
{
"url": "//hombach.de/api",
"description": "Hombach WT 20"
}
],
"paths": {
"/help": {
"get": {
"tags": [
"Hilfe"
],
"summary": "Liefert eine Hilfs-Übersicht der API",
"description": "Liefert einige mögliche Werte für den Parameter \"command\". Identisch mit \"command\":\"help\"",
"operationId": "help",
"responses": {
"200": {
"description": "successful operation",
"content": {
"application/json": {
"schema": {
"type": "object",
"minProperties": 2,
"additionalProperties": {
"type": "string"
}
}
}
}
}
}
}
},
"/help/{query}": {
"get": {
"tags": [
"Hilfe"
],
"summary": "Auflistung Werte für einen Parameter",
"description": "Liefert eine Liste möglicher Werte für den abgefragten Parameter",
"operationId": "help2",
"parameters": [
{
"name": "query",
"in": "path",
"required": true,
"schema": {
"$ref": "#/components/schemas/mode"
},
"desciption": "Abzufragender Parameter"
}
],
"responses": {
"200": {
"description": "successful operation",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/mode"
}
}
},
"example": [
{
"key": "22",
"name": "22",
"mat_key": "Cu",
"diameter": "22",
"nenndurchmesser": "DN 20",
"thickness": "1.5"
},
{
"key": "28",
"name": "28",
"mat_key": "Cu",
"diameter": "28",
"nenndurchmesser": "DN 25",
"thickness": "1.5"
}
]
}
}
}
}
},
"components": {
"schemas": {
"ApiResponse": {
"type": "object",
"properties": {
"code": {
"type": "integer",
"format": "int32"
},
"type": {
"type": "string"
},
"message": {
"type": "string"
}
}
},
"mode": {
"type": "string",
"description": "Das Kommando, mit dem die API angesprochen wird",
"example": "query_sam",
"enum": [
"help",
"query_med",
"query_kmed",
"query_ansch_typ",
"query_lam",
"query_mat",
"query_rohr",
"query_sam",
"query_calc_options",
"query_baugr",
"query_dim",
"query_keys",
"query_keys_export"
]
},
"command": {
"type": "string",
"description": "Das Kommando, mit dem die API angesprochen wird",
"example": "help",
"enum": [
"auslegung",
"nachrechnung",
"reserve",
"abort"
]
},
"kind": {
"type": "string",
"description": "Das Kommando, mit dem die Berechnungsmethode der API bestimmt wird",
"default": "wt",
"example": "direktverdampfer",
"enum": [
"wt",
"direktverdampfer",
"verflüssiger",
"umkehrbetrieb"
]
},
"geo": {
"type": "object",
"description": "Definiert die Ausführung (die Geometrie) des Wärmeübertragers",
"required": [
"lb",
"hb",
"rohr_key",
"lam_key"
],
"properties": {
"lb": {
"type": "number",
"description": "Berippte/lichte Breite",
"maximum": 5200.0,
"minimum": 125.0,
"example": "920"
},
"hb": {
"type": "number",
"description": "Berippte/lichte Höhe",
"maximum": 2880.0,
"minimum": 125.0,
"example": "600"
},
"rohr_key": {
"type": "string",
"description": "Zu verwendendes Rohr",
"example": [
{
"key": "C12x0.35"
},
{
"key": "C9.5x0.3"
}
]
},
"lam_key": {
"type": "string",
"description": "Zu verwendende Lamelle",
"example": [
{
"key": "12:30x26v1"
},
{
"key": "9.5:25x22v1"
}
]
},
"lam_abst_fixed": {
"type": "boolean",
"description": "true, wenn Lamellenabstand vorgegeben werden soll",
"allowEmptyValue": "true"
},
"lam_abst": {
"type": "number",
"description": "Lamellenabstand (mm). Wird berechnet, wenn lam_abst_fixed=false",
"allowEmptyValue": "true"
}
}
},
"betrp": {
"type": "object",
"properties": {
"t_ein": {
"type": "number",
"description": "T ein"
}
}
}
},
"examples": {
"geo": {
"value": {
"lb": "920",
"hb": "600",
"rohr_key": "C9.5x0.3",
"lam_key": "9.5:25x22v1"
}
}
},
"securitySchemes": {
"api_key": {
"type": "apiKey",
"description": "For this sample, you can use the api key `special-key` to test the authorization filters.\n",
"name": "api_key",
"in": "header"
}
}
},
"tags": [
{
"name": "Hilfe",
"description": "Hilfe mit der API"
},
{
"name": "Berechnung",
"description": "Berechnung von Wärmeübertragern"
},
{
"name": "geo",
"description": "<SchemaDefinition schemaRef=\"#/components/schemas/geo\" />\n",
"x-displayName": "Das Geometrie-Modell"
},
{
"name": "betrp",
"description": "<SchemaDefinition schemaRef=\"#/components/schemas/betrp\" />\n",
"x-displayName": "Das Betriebspunkt-Modell"
}
],
"x-tagGroups": [
{
"name": "Hilfe"
}
]
}

BIN
petstore-logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

BIN
redoc-demo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 270 KiB

867
swagger.yaml Normal file
View File

@ -0,0 +1,867 @@
swagger: '2.0'
schemes:
- http
- https
host: petstore.swagger.io
basePath: /v2
info:
description: |
This is a sample server Petstore server.
You can find out more about Swagger at
[http://swagger.io](http://swagger.io) or on [irc.freenode.net, #swagger](http://swagger.io/irc/).
For this sample, you can use the api key `special-key` to test the authorization filters.
# Introduction
This API is documented in **OpenAPI format** and is based on
[Petstore sample](http://petstore.swagger.io/) provided by [swagger.io](http://swagger.io) team.
It was **extended** to illustrate features of [generator-openapi-repo](https://github.com/Rebilly/generator-openapi-repo)
tool and [ReDoc](https://github.com/Redocly/redoc) documentation. In addition to standard
OpenAPI syntax we use a few [vendor extensions](https://github.com/Redocly/redoc/blob/main/docs/redoc-vendor-extensions.md).
# OpenAPI Specification
This API is documented in **OpenAPI format** and is based on
[Petstore sample](http://petstore.swagger.io/) provided by [swagger.io](http://swagger.io) team.
It was **extended** to illustrate features of [generator-openapi-repo](https://github.com/Rebilly/generator-openapi-repo)
tool and [ReDoc](https://github.com/Redocly/redoc) documentation. In addition to standard
OpenAPI syntax we use a few [vendor extensions](https://github.com/Redocly/redoc/blob/main/docs/redoc-vendor-extensions.md).
# Cross-Origin Resource Sharing
This API features Cross-Origin Resource Sharing (CORS) implemented in compliance with [W3C spec](https://www.w3.org/TR/cors/).
And that allows cross-domain communication from the browser.
All responses have a wildcard same-origin which makes them completely public and accessible to everyone, including any code on any site.
# Authentication
Petstore offers two forms of authentication:
- API Key
- OAuth2
OAuth2 - an open protocol to allow secure authorization in a simple
and standard method from web, mobile and desktop applications.
<!-- ReDoc-Inject: <security-definitions> -->
version: 1.0.0
title: Swagger Petstore
termsOfService: 'http://swagger.io/terms/'
contact:
email: apiteam@swagger.io
url: https://github.com/Redocly/redoc
x-logo:
url: 'https://redocly.github.io/redoc/petstore-logo.png'
altText: Petstore logo
license:
name: Apache 2.0
url: 'http://www.apache.org/licenses/LICENSE-2.0.html'
externalDocs:
description: Find out how to create Github repo for your OpenAPI spec.
url: 'https://github.com/Rebilly/generator-openapi-repo'
tags:
- name: pet
description: Everything about your Pets
- name: store
description: Access to Petstore orders
- name: user
description: Operations about user
x-tagGroups:
- name: General
tags:
- pet
- store
- name: User Management
tags:
- user
securityDefinitions:
petstore_auth:
description: |
Get access to data while protecting your account credentials.
OAuth2 is also a safer and more secure way to give you access.
type: oauth2
authorizationUrl: 'http://petstore.swagger.io/api/oauth/dialog'
flow: implicit
scopes:
'write:pets': modify pets in your account
'read:pets': read your pets
api_key:
description: |
For this sample, you can use the api key `special-key` to test the authorization filters.
type: apiKey
name: api_key
in: header
x-servers:
- url: //petstore.swagger.io/v2
description: Default server
- url: //petstore.swagger.io/sandbox
description: Sandbox server
paths:
/pet:
post:
tags:
- pet
summary: Add a new pet to the store
description: Add new pet to the store inventory.
operationId: addPet
consumes:
- application/json
- application/xml
produces:
- application/xml
- application/json
parameters:
- in: body
name: body
description: Pet object that needs to be added to the store
required: true
schema:
$ref: '#/definitions/Pet'
responses:
'405':
description: Invalid input
security:
- petstore_auth:
- 'write:pets'
- 'read:pets'
x-code-samples:
- lang: 'C#'
source: |
PetStore.v1.Pet pet = new PetStore.v1.Pet();
pet.setApiKey("your api key");
pet.petType = PetStore.v1.Pet.TYPE_DOG;
pet.name = "Rex";
// set other fields
PetStoreResponse response = pet.create();
if (response.statusCode == HttpStatusCode.Created)
{
// Successfully created
}
else
{
// Something wrong -- check response for errors
Console.WriteLine(response.getRawResponse());
}
- lang: PHP
source: "$form = new \\PetStore\\Entities\\Pet();\n$form->setPetType(\"Dog\");\n$form->setName(\"Rex\");\n// set other fields\ntry {\n $pet = $client->pets()->create($form);\n} catch (UnprocessableEntityException $e) {\n var_dump($e->getErrors());\n}\n"
put:
tags:
- pet
summary: Update an existing pet
description: ''
operationId: updatePet
consumes:
- application/json
- application/xml
produces:
- application/xml
- application/json
parameters:
- in: body
name: body
description: Pet object that needs to be added to the store
required: true
schema:
$ref: '#/definitions/Pet'
responses:
'400':
description: Invalid ID supplied
'404':
description: Pet not found
'405':
description: Validation exception
security:
- petstore_auth:
- 'write:pets'
- 'read:pets'
x-code-samples:
- lang: PHP
source: "$form = new \\PetStore\\Entities\\Pet();\n$form->setPetId(1);\n$form->setPetType(\"Dog\");\n$form->setName(\"Rex\");\n// set other fields\ntry {\n $pet = $client->pets()->update($form);\n} catch (UnprocessableEntityException $e) {\n var_dump($e->getErrors());\n}\n"
'/pet/{petId}':
get:
tags:
- pet
summary: Find pet by ID
description: Returns a single pet
operationId: getPetById
produces:
- application/xml
- application/json
parameters:
- name: petId
in: path
description: ID of pet to return
required: true
type: integer
format: int64
responses:
'200':
description: successful operation
schema:
$ref: '#/definitions/Pet'
'400':
description: Invalid ID supplied
'404':
description: Pet not found
security:
- api_key: []
post:
tags:
- pet
summary: Updates a pet in the store with form data
description: ''
operationId: updatePetWithForm
consumes:
- application/x-www-form-urlencoded
produces:
- application/xml
- application/json
parameters:
- name: petId
in: path
description: ID of pet that needs to be updated
required: true
type: integer
format: int64
- name: name
in: formData
description: Updated name of the pet
required: false
type: string
- name: status
in: formData
description: Updated status of the pet
required: false
type: string
responses:
'405':
description: Invalid input
security:
- petstore_auth:
- 'write:pets'
- 'read:pets'
delete:
tags:
- pet
summary: Deletes a pet
description: ''
operationId: deletePet
produces:
- application/xml
- application/json
parameters:
- name: api_key
in: header
required: false
type: string
x-example: Bearer <TOKEN>
- name: petId
in: path
description: Pet id to delete
required: true
type: integer
format: int64
responses:
'400':
description: Invalid pet value
security:
- petstore_auth:
- 'write:pets'
- 'read:pets'
'/pet/{petId}/uploadImage':
post:
tags:
- pet
summary: uploads an image
description: ''
operationId: uploadFile
consumes:
- multipart/form-data
produces:
- application/json
parameters:
- name: petId
in: path
description: ID of pet to update
required: true
type: integer
format: int64
- name: additionalMetadata
in: formData
description: Additional data to pass to server
required: false
type: string
- name: file
in: formData
description: file to upload
required: false
type: file
responses:
'200':
description: successful operation
schema:
$ref: '#/definitions/ApiResponse'
security:
- petstore_auth:
- 'write:pets'
- 'read:pets'
/pet/findByStatus:
get:
tags:
- pet
summary: Finds Pets by status
description: Multiple status values can be provided with comma separated strings
operationId: findPetsByStatus
produces:
- application/xml
- application/json
parameters:
- name: status
in: query
description: Status values that need to be considered for filter
required: true
type: array
items:
type: string
enum:
- available
- pending
- sold
default: available
collectionFormat: csv
responses:
'200':
description: successful operation
schema:
type: array
items:
$ref: '#/definitions/Pet'
'400':
description: Invalid status value
security:
- petstore_auth:
- 'write:pets'
- 'read:pets'
/pet/findByTags:
get:
tags:
- pet
summary: Finds Pets by tags
description: 'Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing.'
operationId: findPetsByTags
deprecated: true
produces:
- application/xml
- application/json
parameters:
- name: tags
in: query
description: Tags to filter by
required: true
type: array
items:
type: string
collectionFormat: csv
responses:
'200':
description: successful operation
schema:
type: array
items:
$ref: '#/definitions/Pet'
'400':
description: Invalid tag value
security:
- petstore_auth:
- 'write:pets'
- 'read:pets'
/store/inventory:
get:
tags:
- store
summary: Returns pet inventories by status
description: Returns a map of status codes to quantities
operationId: getInventory
produces:
- application/json
parameters: []
responses:
'200':
description: successful operation
schema:
type: object
additionalProperties:
type: integer
format: int32
security:
- api_key: []
/store/order:
post:
tags:
- store
summary: Place an order for a pet
description: ''
operationId: placeOrder
produces:
- application/xml
- application/json
parameters:
- in: body
name: body
description: order placed for purchasing the pet
required: true
schema:
$ref: '#/definitions/Order'
responses:
'200':
description: successful operation
schema:
$ref: '#/definitions/Order'
'400':
description: Invalid Order
'/store/order/{orderId}':
get:
tags:
- store
summary: Find purchase order by ID
description: 'For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions'
operationId: getOrderById
produces:
- application/xml
- application/json
parameters:
- name: orderId
in: path
description: ID of pet that needs to be fetched
required: true
type: integer
maximum: 5
minimum: 1
format: int64
responses:
'200':
description: successful operation
schema:
$ref: '#/definitions/Order'
'400':
description: Invalid ID supplied
'404':
description: Order not found
delete:
tags:
- store
summary: Delete purchase order by ID
description: For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors
operationId: deleteOrder
produces:
- application/xml
- application/json
parameters:
- name: orderId
in: path
description: ID of the order that needs to be deleted
required: true
type: string
minimum: 1
responses:
'400':
description: Invalid ID supplied
'404':
description: Order not found
/user:
post:
tags:
- user
summary: Create user
description: This can only be done by the logged in user.
operationId: createUser
produces:
- application/xml
- application/json
parameters:
- in: body
name: body
description: Created user object
required: true
schema:
$ref: '#/definitions/User'
responses:
default:
description: successful operation
'/user/{username}':
get:
tags:
- user
summary: Get user by user name
description: ''
operationId: getUserByName
produces:
- application/xml
- application/json
parameters:
- name: username
in: path
description: 'The name that needs to be fetched. Use user1 for testing. '
required: true
type: string
responses:
'200':
description: successful operation
schema:
$ref: '#/definitions/User'
'400':
description: Invalid username supplied
'404':
description: User not found
put:
tags:
- user
summary: Updated user
description: This can only be done by the logged in user.
operationId: updateUser
produces:
- application/xml
- application/json
parameters:
- name: username
in: path
description: name that need to be deleted
required: true
type: string
- in: body
name: body
description: Updated user object
required: true
schema:
$ref: '#/definitions/User'
responses:
'400':
description: Invalid user supplied
'404':
description: User not found
delete:
tags:
- user
summary: Delete user
description: This can only be done by the logged in user.
operationId: deleteUser
produces:
- application/xml
- application/json
parameters:
- name: username
in: path
description: The name that needs to be deleted
required: true
type: string
responses:
'400':
description: Invalid username supplied
'404':
description: User not found
/user/createWithArray:
post:
tags:
- user
summary: Creates list of users with given input array
description: ''
operationId: createUsersWithArrayInput
produces:
- application/xml
- application/json
parameters:
- in: body
name: body
description: List of user object
required: true
schema:
type: array
items:
$ref: '#/definitions/User'
responses:
default:
description: successful operation
/user/createWithList:
post:
tags:
- user
summary: Creates list of users with given input array
description: ''
operationId: createUsersWithListInput
produces:
- application/xml
- application/json
parameters:
- in: body
name: body
description: List of user object
required: true
schema:
type: array
items:
$ref: '#/definitions/User'
responses:
default:
description: successful operation
/user/login:
get:
tags:
- user
summary: Logs user into the system
description: ''
operationId: loginUser
produces:
- application/xml
- application/json
parameters:
- name: username
in: query
description: The user name for login
required: true
type: string
- name: password
in: query
description: The password for login in clear text
required: true
type: string
responses:
'200':
description: successful operation
schema:
type: string
examples:
application/json: OK
application/xml: <message> OK </message>
text/plain: OK
headers:
X-Rate-Limit:
type: integer
format: int32
description: calls per hour allowed by the user
X-Expires-After:
type: string
format: date-time
description: date in UTC when token expires
'400':
description: Invalid username/password supplied
/user/logout:
get:
tags:
- user
summary: Logs out current logged in user session
description: ''
operationId: logoutUser
produces:
- application/xml
- application/json
parameters: []
responses:
default:
description: successful operation
definitions:
ApiResponse:
type: object
properties:
code:
type: integer
format: int32
type:
type: string
message:
type: string
Cat:
description: A representation of a cat
allOf:
- $ref: '#/definitions/Pet'
- type: object
properties:
huntingSkill:
type: string
description: The measured skill for hunting
default: lazy
enum:
- clueless
- lazy
- adventurous
- aggressive
required:
- huntingSkill
Category:
type: object
properties:
id:
description: Category ID
allOf:
- $ref: '#/definitions/Id'
name:
description: Category name
type: string
minLength: 1
sub:
description: Test Sub Category
type: object
properties:
prop1:
type: string
description: Dumb Property
xml:
name: Category
Dog:
description: A representation of a dog
allOf:
- $ref: '#/definitions/Pet'
- type: object
properties:
packSize:
type: integer
format: int32
description: The size of the pack the dog is from
default: 1
minimum: 1
required:
- packSize
HoneyBee:
description: A representation of a honey bee
allOf:
- $ref: '#/definitions/Pet'
- type: object
properties:
honeyPerDay:
type: number
description: Average amount of honey produced per day in ounces
example: 3.14
required:
- honeyPerDay
Id:
type: integer
format: int64
Order:
type: object
properties:
id:
description: Order ID
allOf:
- $ref: '#/definitions/Id'
petId:
description: Pet ID
allOf:
- $ref: '#/definitions/Id'
quantity:
type: integer
format: int32
minimum: 1
default: 1
shipDate:
description: Estimated ship date
type: string
format: date-time
status:
type: string
description: Order Status
enum:
- placed
- approved
- delivered
complete:
description: Indicates whenever order was completed or not
type: boolean
default: false
xml:
name: Order
Pet:
type: object
required:
- name
- photoUrls
discriminator: petType
properties:
id:
description: Pet ID
allOf:
- $ref: '#/definitions/Id'
category:
description: Categories this pet belongs to
allOf:
- $ref: '#/definitions/Category'
name:
description: The name given to a pet
type: string
example: Guru
photoUrls:
description: The list of URL to a cute photos featuring pet
type: array
default: []
xml:
name: photoUrl
wrapped: true
items:
type: string
format: url
tags:
description: Tags attached to the pet
type: array
xml:
name: tag
wrapped: true
items:
$ref: '#/definitions/Tag'
status:
type: string
description: Pet status in the store
enum:
- available
- pending
- sold
petType:
description: Type of a pet
type: string
xml:
name: Pet
Tag:
type: object
properties:
id:
description: Tag ID
allOf:
- $ref: '#/definitions/Id'
name:
description: Tag name
type: string
minLength: 1
xml:
name: Tag
User:
type: object
properties:
id:
description: User ID
$ref: '#/definitions/Id'
username:
description: User supplied username
type: string
minLength: 4
example: John78
firstName:
description: User first name
type: string
minLength: 1
example: John
lastName:
description: User last name
type: string
minLength: 1
example: Smith
email:
description: User email address
type: string
format: email
example: john.smith@example.com
password:
type: string
description: 'User password, MUST contain a mix of upper and lower case letters, as well as digits'
format: password
minLength: 8
pattern: '(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])'
example: drowssaP123
phone:
description: User phone number in international format
type: string
pattern: "^\\+(?:[0-9]-?){6,14}[0-9]$"
example: +1-202-555-0192
x-nullable: true
userStatus:
description: User status
type: integer
format: int32
xml:
name: User

127
webpack.config.ts Normal file
View File

@ -0,0 +1,127 @@
import * as CopyWebpackPlugin from 'copy-webpack-plugin';
import ForkTsCheckerWebpackPlugin = require('fork-ts-checker-webpack-plugin');
import * as HtmlWebpackPlugin from 'html-webpack-plugin';
import { resolve } from 'path';
import * as webpack from 'webpack';
import { webpackIgnore } from '../config/webpack-utils';
const VERSION = JSON.stringify(require('../package.json').version);
const REVISION = JSON.stringify(
require('child_process').execSync('git rev-parse --short HEAD').toString().trim(),
);
function root(filename) {
return resolve(__dirname + '/' + filename);
}
export default (env: { playground?: boolean; bench?: boolean } = {}, { mode }) => ({
entry: [
root('../src/polyfills.ts'),
root(
env.playground
? 'playground/hmr-playground.tsx'
: env.bench
? '../benchmark/index.tsx'
: 'index.tsx',
),
],
target: 'web',
output: {
filename: 'redoc-demo.bundle.js',
path: root('dist'),
globalObject: 'this',
},
devServer: {
static: __dirname,
port: 9090,
hot: true,
historyApiFallback: true,
open: true,
},
stats: {
children: true,
},
resolve: {
extensions: ['.ts', '.tsx', '.js', '.json'],
fallback: {
path: require.resolve('path-browserify'),
buffer: require.resolve('buffer'),
http: false,
fs: false,
os: false,
},
alias:
mode !== 'production'
? {
'react-dom': '@hot-loader/react-dom',
}
: {},
},
performance: false,
externals: {
esprima: 'esprima',
'node-fetch': 'null',
'node-fetch-h2': 'null',
yaml: 'null',
'safe-json-stringify': 'null',
},
module: {
rules: [
{ test: [/\.eot$/, /\.gif$/, /\.woff$/, /\.svg$/, /\.ttf$/], use: 'null-loader' },
{
test: /\.(tsx?|[cm]?js)$/,
loader: 'esbuild-loader',
options: {
target: 'es2015',
tsconfigRaw: require('../tsconfig.json'),
},
exclude: [/node_modules/],
},
{
test: /\.css$/,
use: [
'style-loader',
'css-loader',
{
loader: 'esbuild-loader',
options: {
minify: true,
},
},
],
},
],
},
plugins: [
new webpack.DefinePlugin({
__REDOC_VERSION__: VERSION,
__REDOC_REVISION__: REVISION,
'process.env': '{}',
'process.platform': '"browser"',
'process.stdout': 'null',
}),
// new webpack.NamedModulesPlugin(),
// new webpack.optimize.ModuleConcatenationPlugin(),
new HtmlWebpackPlugin({
template: env.playground
? 'demo/playground/index.html'
: env.bench
? 'benchmark/index.html'
: 'demo/index.html',
}),
new webpack.ProvidePlugin({
Buffer: ['buffer', 'Buffer'],
}),
new ForkTsCheckerWebpackPlugin({ logger: { infrastructure: 'silent', issues: 'console' } }),
webpackIgnore(/js-yaml\/dumper\.js$/),
webpackIgnore(/json-schema-ref-parser\/lib\/dereference\.js/),
webpackIgnore(/^\.\/SearchWorker\.worker$/),
new CopyWebpackPlugin({
patterns: ['demo/openapi.yaml'],
}),
],
});