22

I am designing an API and I want to define an enum Severity which can have values LOW, MEDIUM or HIGH. Internally Severity gets stored as an integer so I want to map these to 2,1 and 0 respectively. Is there a way to do this in an OpenAPI definition? This is currently what I have for Severity:

 severity:
   type: string
   enum:
     - HIGH
     - MEDIUM
     - LOW
Helen
  • 87,344
  • 17
  • 243
  • 314
Yellowjacket
  • 548
  • 2
  • 7
  • 19

2 Answers2

55

OpenAPI 3.1

OpenAPI 3.1 uses the latest JSON Schema, and the recommended way to annotate individual enum values in JSON Schema is to use oneOf+const instead of enum. This way you can specify both custom names (title) and descriptions for enum values.

Severity:
  type: integer
  oneOf:
    - title: HIGH
      const: 2
      description: An urgent problem
    - title: MEDIUM
      const: 1
    - title: LOW
      const: 0
      description: Can wait forever

OpenAPI 3.0 and 2.0

These versions do not have a way to define custom names for enum values, but some tools provide x- extensions for this purpose. For example:

Check with your tooling vendors to see if they have a similar extension.

Helen
  • 87,344
  • 17
  • 243
  • 314
4

Open API 3.0

You can use description:

Severity:
   type: integer
   enum: [2, 1, 0]
   description: >
      dictionary:
          * 2 HIGH
          * 1 MEDIUM
          * 0 LOW

It will not affect automatic code generation, but will be visible in generated documentation.

Lapti
  • 41
  • 2
  • here what would be the type of request object for this contract? Here type is int then it expects int type or enum type as input? – priya_21 Jun 22 '23 at 20:20