BwManagementApi.json 20.6 KB
Newer Older
  "openapi": "3.0.2",
  "info": {
    "description": "The ETSI MEC ISG MEC015 Bandwidth Management API described using OpenAPI",
    "version": "1.1.1",
    "title": "BWM API",
    "license": {
admin_forge's avatar
admin_forge committed
      "name": "BSD-3-Clause",
      "url": "https://forge.etsi.org/legal-matters"
    "contact": {
      "email": "cti_support@etsi.org"
    }
  },
  "externalDocs": {
    "description": "ETSI MEC015 V1.1.1 Bandwidth Management API",
    "url": "http://www.etsi.org/deliver/etsi_gs/MEC/001_099/015/01.01.01_60/gs_MEC015v010101p.pdf"
  },
  "servers": [
    {
      "url": "http://127.0.0.1:8081/bwm/v1"
    {
      "url": "https://127.0.0.1:8081/bwm/v1"
    }
  ],
  "security": [
    {
      "OauthSecurity": [
        "all"
      ]
    }
  ],
  "tags": [
    {
      "name": "BandwithAllocation"
    },
    {
      "name": "BandwithAllocations"
    }
  ],
  "paths": {
    "/bw_allocations": {
      "get": {
        "description": "This method retrieves information about a list of bandwidthAllocation resources. In queries, either \"app_instance_id\" or \"app_name\" or \"session_Id\"  or none of them shall be present.",
        "parameters": [
          {
            "$ref": "#/components/parameters/Query.AppInstanceId"
          },
          {
            "$ref": "#/components/parameters/Query.AppName"
          },
          {
            "$ref": "#/components/parameters/Query.SessionId"
          }
        ],
        "operationId": "BandwithAllocations_GET",
        "tags": [
          "BandwithAllocations"
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/BandwithAllocations"
          },
          "400": {
            "$ref": "#/components/responses/Error.400"
          },
          "403": {
            "$ref": "#/components/responses/Error.403"
          },
          "404": {
            "$ref": "#/components/responses/Error.404"
          }
        }
      },
      "post": {
        "description": "This method is used to create a bandwidthAllocation resource.",
        "requestBody": {
          "$ref": "#/components/requestBodies/BwInfo"
        },
        "operationId": "BandwithAllocations_POST",
        "tags": [
          "BandwithAllocations"
        ],
        "responses": {
          "201": {
            "$ref": "#/components/responses/BandwithAllocation.201"
          },
          "400": {
            "$ref": "#/components/responses/Error.400"
          },
          "403": {
            "$ref": "#/components/responses/Error.403"
          },
          "404": {
            "$ref": "#/components/responses/Error.404"
          }
    "/bw_allocations/{allocationId}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/Path.AllocationId"
        }
      ],
      "get": {
        "description": "This method retrieves information about a specific bandwidthAllocation resource.",
        "operationId": "BandwithAllocation_GET",
        "tags": [
          "BandwithAllocation"
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/BandwithAllocation"
          },
          "400": {
            "$ref": "#/components/responses/Error.400"
          },
          "403": {
            "$ref": "#/components/responses/Error.403"
          },
          "404": {
            "$ref": "#/components/responses/Error.404"
          }
      "put": {
        "description": "This method updates the information about a specific bandwidthAllocation resource.",
        "requestBody": {
          "$ref": "#/components/requestBodies/BwInfo"
        },
        "operationId": "BandwithAllocation_PUT",
        "tags": [
          "BandwithAllocation"
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/BandwithAllocation"
          },
          "400": {
            "$ref": "#/components/responses/Error.400"
          },
          "403": {
            "$ref": "#/components/responses/Error.403"
          },
          "404": {
            "$ref": "#/components/responses/Error.404"
          },
          "412": {
            "$ref": "#/components/responses/Error.412"
          }
        }
      },
      "patch": {
        "description": "This method updates the information about a specific bandwidthAllocation resource.",
        "requestBody": {
          "$ref": "#/components/requestBodies/BwInfoDeltas"
        },
        "operationId": "BandwithAllocation_PAT",
        "tags": [
          "BandwithAllocation"
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/BandwithAllocation"
          },
          "400": {
            "$ref": "#/components/responses/Error.400"
          },
          "403": {
            "$ref": "#/components/responses/Error.403"
          },
          "404": {
            "$ref": "#/components/responses/Error.404"
          },
          "412": {
            "$ref": "#/components/responses/Error.412"
          }
      "delete": {
        "description": "Remove a specific bandwidthAllocation resource. DELETE method is typically used in \"Unregister from Bandwidth Management Service\" procedure",
        "operationId": "BandwithAllocation_DEL",
        "tags": [
          "BandwithAllocation"
        ],
        "responses": {
          "204": {
            "description": "No Content"
          },
          "403": {
            "$ref": "#/components/responses/Error.403"
          },
          "404": {
            "$ref": "#/components/responses/Error.404"
          }
        }
      }
    }
  },
  "components": {
    "parameters": {
      "Path.AllocationId": {
        "name": "allocationId",
        "in": "path",
        "description": "Represents a bandwidth allocation instance",
        "required": true,
        "schema": {
          "type": "string"
        }
      },
      "Query.AppInstanceId": {
        "name": "app_instance_id",
        "in": "query",
        "description": "A MEC application instance may use multiple app_instance_ids as an input parameter to query the bandwidth allocation of a list of mobile edge application instances.",
        "schema": {
          "type": "array",
          "items": {
            "type": "string"
          }
      },
      "Query.AppName": {
        "name": "app_name",
        "in": "query",
        "description": "A MEC application instance may use multiple ser_names as an input parameter to query the bandwidth allocation of a list of mobile edge application instances.",
        "schema": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      },
      "Query.SessionId": {
        "name": "session_id",
        "in": "query",
        "description": "A MEC application instance may use session_id as an input parameter to query the bandwidth allocation of a list of sessions.",
        "schema": {
          "type": "array",
          "items": {
            "type": "string"
          }
    "requestBodies": {
      "BwInfo": {
        "description": "Bandwidth Allocation information",
        "required": true,
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/BwInfo"
          }
        }
      },
      "BwInfoDeltas": {
        "description": "Description of the changes to instruct the server how to modify the Bandwidth Allocation information.",
        "required": true,
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/BwInfoDeltas"
            }
          }
        }
      }
    },
    "links": {
      "GetBandwithAllocation": {
        "operationId": "BandwithAllocation_GET",
        "description": "The `allocationId` value returned in the response can be used as the `allocationId` parameter in 'GET .../bw_allocations/{allocationId}''",
        "parameters": {
          "description": "regex = \\/bwm\\/v1\\/bw_allocations\\/(.*); allocationId = location.match(regex)[1]; where \"location\" is the location header uri returned from operationId BandwithAllocations_POST  ",
          "allocationId": "TBC"
        }
      },
      "PatBandwithAllocation": {
        "operationId": "BandwithAllocation_PAT",
        "description": "The `allocationId` value returned in the response can be used as the `allocationId` parameter in 'PATCH .../bw_allocations/{allocationId}''",
        "parameters": {
          "description": "regex = \\/bwm\\/v1\\/bw_allocations\\/(.*); allocationId = location.match(regex)[1]; where \"location\" is the location header uri returned from operationId BandwithAllocations_POST  ",
          "allocationId": "TBC"
        }
      },
      "PutBandwithAllocation": {
        "operationId": "BandwithAllocation_PUT",
        "description": "The `allocationId` value returned in the response can be used as the `allocationId` parameter in 'PUT .../bw_allocations/{allocationId}''",
        "parameters": {
          "description": "regex = \\/bwm\\/v1\\/bw_allocations\\/(.*); allocationId = location.match(regex)[1]; where \"location\" is the location header uri returned from operationId BandwithAllocations_POST  ",
          "allocationId": "TBC"
        }
      },
      "DelBandwithAllocation": {
        "operationId": "BandwithAllocation_DEL",
        "description": "The `allocationId` value returned in the response can be used as the `allocationId` parameter in 'DELETE .../bw_allocations/{allocationId}''",
        "parameters": {
          "description": "regex = \\/bwm\\/v1\\/bw_allocations\\/(.*); allocationId = location.match(regex)[1]; where \"location\" is the location header uri returned from operationId BandwithAllocations_POST  ",
          "allocationId": "TBC"
        }
      }
    },
    "responses": {
      "BandwithAllocation": {
        "description": "Bandwidth Allocation.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/BwInfo"
            }
          }
        }
      },
      "BandwithAllocation.201": {
        "description": "Bandwidth Allocation.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/BwInfo"
        "headers": {
          "location": {
            "description": "The resource URI of the created resource",
            "schema": {
              "type": "string",
              "format": "uri"
          }
        }
      },
      "BandwithAllocations": {
        "description": "Bandwidth Allocations.",
        "content": {
          "application/json": {
            "schema": {
              "type": "array",
              "minItems": 0,
              "items": {
                "$ref": "#/components/schemas/BwInfo"
        },
        "links": {
          "getBandwithAllocation": {
            "$ref": "#/components/links/GetBandwithAllocation"
          },
          "patBandwithAllocation": {
            "$ref": "#/components/links/PatBandwithAllocation"
          },
          "putBandwithAllocation": {
            "$ref": "#/components/links/PutBandwithAllocation"
          },
          "delBandwithAllocation": {
            "$ref": "#/components/links/DelBandwithAllocation"
          }
      "Error.400": {
        "description": "Bad Request. It is used to indicate that incorrect parameters were passed to the request.",
        "content": {
          "application/problem+json": {
            "schema": {
              "$ref": "#/components/schemas/ProblemDetails"
          },
          "text/plain": {
            "schema": {
              "$ref": "#/components/schemas/Empty"
        }
      },
      "Error.401": {
        "description": "Unauthorized. It is used when the client did not submit the appropriate credentials.",
        "content": {
          "application/problem+json": {
            "schema": {
              "$ref": "#/components/schemas/ProblemDetails"
          },
          "text/plain": {
            "schema": {
              "$ref": "#/components/schemas/Empty"
        }
      },
      "Error.403": {
        "description": "Forbidden. The operation is not allowed given the current status of the resource. ",
        "content": {
          "application/problem+json": {
            "schema": {
              "$ref": "#/components/schemas/ProblemDetails"
          }
        }
      },
      "Error.404": {
        "description": "Not Found. It is used when a client provided a URI that cannot be mapped  to a valid resource URI.",
        "content": {
          "application/problem+json": {
            "schema": {
              "$ref": "#/components/schemas/ProblemDetails"
            }
          },
          "text/plain": {
            "schema": {
              "$ref": "#/components/schemas/Empty"
        }
      },
      "Error.412": {
        "description": "Precondition Failed. It is used when a condition has failed during conditional requests,  e.g. when using ETags to avoid write conflicts.",
        "content": {
          "application/problem+json": {
            "schema": {
              "$ref": "#/components/schemas/ProblemDetails"
          },
          "text/plain": {
            "schema": {
              "$ref": "#/components/schemas/Empty"
    "securitySchemes": {
      "OauthSecurity": {
        "type": "oauth2",
        "flows": {
          "clientCredentials": {
            "tokenUrl": "https://oauth.exampleAPI/token",
            "scopes": {
              "all": "Single oauth2 scope for API"
            }
          }
        }
      }
    },
    "schemas": {
      "Empty": {
        "description": "Empty schema"
      },
      "ProblemDetails": {
        "type": "object",
        "properties": {
          "type": {
            "$ref": "#/components/schemas/Problem.type"
            "$ref": "#/components/schemas/Problem.title"
            "$ref": "#/components/schemas/Problem.status"
            "$ref": "#/components/schemas/Problem.detail"
            "$ref": "#/components/schemas/Problem.instance"
          }
        }
      },
      "Problem.type": {
        "type": "string",
        "format": "uri",
        "description": "A URI reference according to IETF RFC 3986 that identifies the problem type"
      },
      "Problem.title": {
        "type": "string",
        "description": "A short, human-readable summary of the problem type"
      },
      "Problem.status": {
        "type": "integer",
        "format": "uint32",
        "description": "The HTTP status code for this occurrence of the problem"
      },
      "Problem.detail": {
        "type": "string",
        "description": "A human-readable explanation specific to this occurrence of the problem"
      },
      "Problem.instance": {
        "type": "string",
        "format": "uri",
        "description": "A URI reference that identifies the specific occurrence of the problem"
      },
      "BwInfo": {
        "description": "information of bandwidth resource",
        "type": "object",
        "required": [
          "appInsId",
          "requestType",
          "fixedAllocation",
          "allocationDirection"
        ],
        "properties": {
          "timeStamp": {
            "$ref": "#/components/schemas/TimeStamp"
            "$ref": "#/components/schemas/AppInsId"
            "$ref": "#/components/schemas/RequestType"
            "$ref": "#/components/schemas/SessionFilter"
            "$ref": "#/components/schemas/FixedBWPriority"
            "$ref": "#/components/schemas/FixedAllocation"
            "$ref": "#/components/schemas/AllocationDirection"
        "description": "Conform to JSON merge patch format and processing rules specified IETF RFC 7396, this type represents the attributes whose value are allowed to be updated with HTTP PATCH method in content format JSON",
        "type": "object",
        "properties": {
          "appInsId": {
            "$ref": "#/components/schemas/AppInsId"
            "$ref": "#/components/schemas/RequestType"
            "$ref": "#/components/schemas/SessionFilter"
            "$ref": "#/components/schemas/FixedBWPriority"
            "$ref": "#/components/schemas/FixedAllocation"
            "$ref": "#/components/schemas/AllocationDirection"
          }
        }
      },
      "TimeStamp": {
        "type": "object",
        "required": [
          "seconds",
          "nanoSeconds"
        ],
        "properties": {
          "seconds": {
            "$ref": "#/components/schemas/Seconds"
            "$ref": "#/components/schemas/NanoSeconds"
          }
        }
      },
      "AppInsId": {
        "description": "Application instance identifier",
        "type": "string"
      },
      "RequestType": {
        "description": "Numeric value (0 - 255) corresponding to specific type of consumer",
        "type": "string",
        "enum": [
          "APPLICATION_SPECIFIC_BW_ALLOCATION",
          "SESSION_SPECIFIC_BW_ALLOCATION"
        ],
        "example": "APPLICATION_SPECIFIC_BW_ALLOCATION"
      },
      "SessionFilter": {
        "description": "Session filtering criteria, applicable when requestType is set as SESSION_SPECIFIC_BW_ALLOCATION. Any filtering criteria shall define a single session only. In case multiple sessions match sessionFilter the request shall be rejected",
        "type": "array",
        "items": {
          "type": "object",
          "properties": {
            "sourceIp": {
              "$ref": "#/components/schemas/SourceIp"
              "$ref": "#/components/schemas/SourcePort"
              "$ref": "#/components/schemas/DstAddress"
              "$ref": "#/components/schemas/DstPort"
              "$ref": "#/components/schemas/Protocol"
            }
          }
        }
      },
      "FixedBWPriority": {
        "description": "Indicates the allocation priority when dealing with several applications or sessions in parallel. Values are not defined in the present document",
        "type": "string",
        "enum": [
          "not defined in the present document"
        ]
      },
      "FixedAllocation": {
        "description": "Size of requested fixed BW allocation in [bps]",
        "type": "string"
      },
      "AllocationDirection": {
        "description": "The direction of the requested BW allocation",
        "type": "string",
        "enum": [
          "00 = Downlink (towards the UE)",
          "01 = Uplink (towards the application/session)",
          "10 = Symmetrical"
        ],
        "example": "00"
      },
      "Seconds": {
        "description": "The seconds part of the Time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC",
        "type": "integer",
        "format": "uint32"
      },
      "NanoSeconds": {
        "description": "The nanoseconds part of the Time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC",
        "type": "integer",
        "format": "uint32"
      },
      "SourceIp": {
        "description": "Source address identity of session (including range)",
        "type": "string"
      },
      "SourcePort": {
        "description": "Source port identity of session",
        "type": "array",
        "items": {
          "type": "string"
        }
      },
      "DstAddress": {
        "description": "Destination address identity of session (including range)",
        "type": "string"
      },
      "DstPort": {
        "description": "Destination port identity of session",
        "type": "array",
        "items": {
          "type": "string"
      },
      "Protocol": {
        "description": "Protocol number",
        "type": "string"
      }