Home

Awesome

VaporOpenAPIExample

This example shows off an early stage project to both add type information to Vapor requests/responses and also take advantage of that information to generate OpenAPI documentation.

Note that this app and the libraries it showcases are built off of Vapor 4.

The example app serves up OpenAPI documentation on itself using the beautiful Redoc viewer.

The OpenAPI document produced is compatible with the OpenAPI specification v3.1.x.

Documentation served by example app

The OpenAPI it produces contains (among other things) routes, path and query parameters, and success and error responses including response body schemas.

openapi: 3.1.0
info:
  title: Vapor OpenAPI Example API
  description: '## Descriptive Text

    This text supports _markdown_!'
  version: '1.0'
servers:
- url: https://127.0.0.1
paths:
  /docs:
    get:
      tags:
      - Documentation
      summary: View API Documentation
      description: API Documentation is served using the Redoc web app.
      responses:
        200:
          description: OK
          content:
            text/html:
              schema:
                type: string
  /docs/openapi.yml:
    get:
      tags:
      - Documentation
      summary: Download API Documentation
      description: Retrieve the OpenAPI documentation as a YAML file.
      responses:
        200:
          description: OK
          content:
            application/x-yaml:
              schema:
                type: string
  /hello:
    get:
      tags:
      - Greetings
      summary: View a greeting
      description: Say hello in one of the supported languages!
      parameters:
      - name: language
        in: query
        schema:
          type: string
          enum:
          - english
          - spanish
      responses:
        200:
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  language:
                    type: string
                    enum:
                    - english
                    - spanish
                  greeting:
                    type: string
                required:
                - language
                - greeting
        400:
          description: Bad Request
          content:
            text/plain:
              schema:
                type: string
    post:
      tags:
      - Greetings
      summary: Create a greeting
      description: The endpoint is not actually implemented. It is just mocked up.
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                language:
                  type: string
                  enum:
                  - english
                  - spanish
                greeting:
                  type: string
              required:
              - language
              - greeting
      responses:
        201:
          description: Created
          content:
            application/json:
              schema:
                type: object
                properties:
                  language:
                    type: string
                    enum:
                    - english
                    - spanish
                  greeting:
                    type: string
                required:
                - language
                - greeting
    delete:
      tags:
      - Greetings
      summary: Delete a greeting
      responses:
        204:
          description: No Content