diff --git a/spec/asyncapi.md b/spec/asyncapi.md index 420106506..0f1b0990b 100644 --- a/spec/asyncapi.md +++ b/spec/asyncapi.md @@ -51,11 +51,13 @@ It means that the [application](#definitionsApplication) allows [consumers](#def - [Contact Object](#contactObject) - [License Object](#licenseObject) - [Servers Object](#serversObject) - - [Server Object](#serverObject) + - [Server Object](#serverObject) + - [Server Trait Object](#serverTraitObject) - [Server Variable Object](#serverVariableObject) - [Default Content Type](#defaultContentTypeString) - [Channels Object](#channelsObject) - [Channel Item Object](#channelItemObject) + - [Channel Trait Object](#channelTraitObject) - [Operation Object](#operationObject) - [Operation Trait Object](#operationTraitObject) - [Message Object](#messageObject) @@ -329,20 +331,18 @@ Field Pattern | Type | Description "url": "development.gigantic-server.com", "protocol": "kafka", "protocolVersion": "1.0.0", - "metadata": { - "name": "DevelopmentServer", - "title": "Development server", - "summary": "A development server", - "description": "A longer description", - "tags": [ - { - "name": "development" - } - ], - "externalDocs": { - "description": "Find more info here", - "url": "https://kafka.apache.org/" + "name": "DevelopmentServer", + "title": "Development server", + "summary": "A development server", + "description": "A longer description", + "tags": [ + { + "name": "development" } + ], + "externalDocs": { + "description": "Find more info here", + "url": "https://kafka.apache.org/" } } ``` @@ -351,16 +351,15 @@ Field Pattern | Type | Description url: development.gigantic-server.com protocol: kafka protocolVersion: 1.0.0 -metadata: - name: DevelopmentServer - title: Development server - summary: A development server - description: A longer description - tags: +name: DevelopmentServer +title: Development server +summary: A development server +description: A longer description +tags: - name: development - externalDocs: - description: Find more info here - url: https://kafka.apache.org/ +externalDocs: + description: Find more info here + url: https://kafka.apache.org/ ``` @@ -375,12 +374,12 @@ Field Name | Type | Description url | `string` | **REQUIRED**. A URL to the target host. This URL supports Server Variables and MAY be relative, to indicate that the host location is relative to the location where the AsyncAPI document is being served. Variable substitutions will be made when a variable is named in `{`braces`}`. protocol | `string` | **REQUIRED**. The protocol this URL supports for connection. Supported protocol include, but are not limited to: `amqp`, `amqps`, `http`, `https`, `ibmmq`, `jms`, `kafka`, `kafka-secure`, `anypointmq`, `mqtt`, `secure-mqtt`, `solace`, `stomp`, `stomps`, `ws`, `wss`, `mercure`. protocolVersion | `string` | The version of the protocol used for connection. For instance: AMQP `0.9.1`, HTTP `2.0`, Kafka `1.0.0`, etc. -metadata | [Metadata Object(#metadataObject)] | A metadata describing the server. variables | Map[`string`, [Server Variable Object](#serverVariableObject)] | A map between a variable name and its value. The value is used for substitution in the server's URL template. security | [[Security Requirement Object](#securityRequirementObject)] | A declaration of which security mechanisms can be used with this server. The list of values includes alternative security requirement objects that can be used. Only one of the security requirement objects need to be satisfied to authorize a connection or operation. bindings | [Server Bindings Object](#serverBindingsObject) \| [Reference Object](#referenceObject) | A map where the keys describe the name of the protocol and the values describe protocol-specific definitions for the server. +traits | [[Server Trait Object](#serverTraitObject) | [Reference Object](#referenceObject)] | A list of traits to apply to the server object. Traits MUST be merged into the server object using the [JSON Merge Patch](https://tools.ietf.org/html/rfc7386) algorithm in the same order they are defined here. The resulting object MUST be a valid [Server Object](#serverObject). -This object MAY be extended with [Specification Extensions](#specificationExtensions). +This object inherits the fields from [Metadata Object](#metadataObject) and MAY be extended with [Specification Extensions](#specificationExtensions). ##### Server Object Example @@ -391,20 +390,18 @@ A single server would be described as: "url": "development.gigantic-server.com", "protocol": "kafka", "protocolVersion": "1.0.0", - "metadata": { - "name": "DevelopmentServer", - "title": "Development server", - "summary": "A development server", - "description": "A longer description", - "tags": [ - { - "name": "development" - } - ], - "externalDocs": { - "description": "Find more info here", - "url": "https://kafka.apache.org/" + "name": "DevelopmentServer", + "title": "Development server", + "summary": "A development server", + "description": "A longer description", + "tags": [ + { + "name": "development" } + ], + "externalDocs": { + "description": "Find more info here", + "url": "https://kafka.apache.org/" } } ``` @@ -413,16 +410,15 @@ A single server would be described as: url: development.gigantic-server.com protocol: kafka protocolVersion: 1.0.0 -metadata: - name: DevelopmentServer - title: Development server - summary: A development server - description: A longer description - tags: +name: DevelopmentServer +title: Development server +summary: A development server +description: A longer description +tags: - name: development - externalDocs: - description: Find more info here - url: https://kafka.apache.org/ +externalDocs: + description: Find more info here + url: https://kafka.apache.org/ ``` The following shows how multiple servers can be described, for example, at the AsyncAPI Object's [`servers`](#A2SServers): @@ -434,38 +430,32 @@ The following shows how multiple servers can be described, for example, at the A "url": "development.gigantic-server.com", "protocol": "amqp", "protocolVersion": "0.9.1", - "metadata": { - "name": "DevelopmentServer", - "title": "Development server" - } + "name": "DevelopmentServer", + "title": "Development server" }, "staging": { "url": "staging.gigantic-server.com", "protocol": "amqp", "protocolVersion": "0.9.1", - "metadata": { - "name": "StagingServer", - "title": "Staging server" - } + "name": "StagingServer", + "title": "Staging server" }, "production": { "url": "api.gigantic-server.com", "protocol": "amqp", "protocolVersion": "0.9.1", - "metadata": { - "name": "ProductionServer", - "title": "Production server", - "summary": "A production server", - "description": "A longer description", - "tags": [ - { - "name": "production" - } - ], - "externalDocs": { - "description": "Find more info here", - "url": "https://www.amqp.org/" + "name": "ProductionServer", + "title": "Production server", + "summary": "A production server", + "description": "A longer description", + "tags": [ + { + "name": "production" } + ], + "externalDocs": { + "description": "Find more info here", + "url": "https://www.amqp.org/" } } } @@ -478,30 +468,27 @@ servers: url: development.gigantic-server.com protocol: amqp protocolVersion: 0.9.1 - metadata: - name: DevelopmentServer - title: Development server + name: DevelopmentServer + title: Development server staging: url: staging.gigantic-server.com protocol: amqp protocolVersion: 0.9.1 - metadata: - name: StagingServer - title: Staging server + name: StagingServer + title: Staging server production: url: api.gigantic-server.com protocol: amqp protocolVersion: 0.9.1 - metadata: - name: ProductionServer - title: Production server - summary: A production server - description: A longer description - tags: + name: ProductionServer + title: Production server + summary: A production server + description: A longer description + tags: - name: production - externalDocs: - description: Find more info here - url: https://www.amqp.org/ + externalDocs: + description: Find more info here + url: https://www.amqp.org/ ``` The following shows how variables can be used for a server configuration: @@ -512,9 +499,7 @@ The following shows how variables can be used for a server configuration: "production": { "url": "{username}.gigantic-server.com:{port}/{basePath}", "protocol": "secure-mqtt", - "metadata": { - "description": "The production API server", - }, + "description": "The production API server", "variables": { "username": { "default": "demo", @@ -541,8 +526,7 @@ servers: production: url: '{username}.gigantic-server.com:{port}/{basePath}' protocol: secure-mqtt - metadata: - description: The production API server + description: The production API server variables: username: # note! no enum here means it is an open value @@ -559,6 +543,41 @@ servers: ``` + +#### Server Trait Object + +Describes a trait that MAY be applied to an [Server Object](#serverObject). This object MAY contain any property from the [Server Object](#serverObject), except `url`, `protocol`, `protocolVersion`, `variables` and `traits`. + +##### Fixed Fields + +Field Name | Type | Description +---|:---:|--- +security | [[Security Requirement Object](#securityRequirementObject)] | A declaration of which security mechanisms can be used with this server. The list of values includes alternative security requirement objects that can be used. Only one of the security requirement objects need to be satisfied to authorize a connection or operation. +bindings | [Server Bindings Object](#serverBindingsObject) \| [Reference Object](#referenceObject) | A map where the keys describe the name of the protocol and the values describe protocol-specific definitions for the server. + +This object inherits the fields from [Metadata Object](#metadataObject) and MAY be extended with [Specification Extensions](#specificationExtensions). + +##### Server Trait Object Example + +```json +{ + "security": { + "petstore_auth": [ + "write:pets", + "read:pets" + ] + } +} +``` + +```yaml +security: + petstore_auth: + - "write:pets" + - "read:pets" +``` + + #### Server Variable Object An object representing a Server Variable for server URL template substitution. @@ -646,32 +665,26 @@ Describes the operations available on a single channel. Field Name | Type | Description ---|:---:|--- $ref | `string` | Allows for an external definition of this channel item. The referenced structure MUST be in the format of a [Channel Item Object](#channelItemObject). If there are conflicts between the referenced definition and this Channel Item's definition, the behavior is *undefined*.

**Deprecated:** Usage of the `$ref` property has been deprecated. -metadata | [Metadata Object(#metadataObject)] | A metadata describing the channel. servers | [`string`] | The servers on which this channel is available, specified as an optional unordered list of names (string keys) of [Server Objects](#serverObject) defined in the [Servers Object](#serversObject) (a map). If `servers` is absent or empty then this channel must be available on all servers defined in the [Servers Object](#serversObject). subscribe | [Operation Object](#operationObject) | A definition of the SUBSCRIBE operation, which defines the messages produced by the application and sent to the channel. publish | [Operation Object](#operationObject) | A definition of the PUBLISH operation, which defines the messages consumed by the application from the channel. parameters | [Parameters Object](#parametersObject) | A map of the parameters included in the channel name. It SHOULD be present only when using channels with expressions (as defined by [RFC 6570 section 2.2](https://tools.ietf.org/html/rfc6570#section-2.2)). bindings | [Channel Bindings Object](#channelBindingsObject) \| [Reference Object](#referenceObject) | A map where the keys describe the name of the protocol and the values describe protocol-specific definitions for the channel. +traits | [[Channel Trait Object](#channelTraitObject) | [Reference Object](#referenceObject)] | A list of traits to apply to the channel object. Traits MUST be merged into the channel object using the [JSON Merge Patch](https://tools.ietf.org/html/rfc7386) algorithm in the same order they are defined here. The resulting object MUST be a valid [Channel Item Object](#channelItemObject). -This object can be extended with [Specification Extensions](#specificationExtensions). +This object inherits the fields from [Metadata Object](#metadataObject) and MAY be extended with [Specification Extensions](#specificationExtensions). ##### Channel Item Object Example ```json { - "metadata": { - "name": "UserSignupChannel", - "title": "User Signup Channel", - "description": "This channel is used to exchange messages about users signing up" - }, + "name": "UserSignupChannel", + "title": "User Signup Channel", + "description": "This channel is used to exchange messages about users signing up", "subscribe": { - "metadata": { - "summary": "A user signed up." - }, + "summary": "A user signed up.", "message": { - "metadata": { - "description": "A longer description of the message" - }, + "description": "A longer description of the message", "payload": { "type": "object", "properties": { @@ -697,16 +710,13 @@ This object can be extended with [Specification Extensions](#specificationExtens ``` ```yaml -metadata: - name: UserSignupChannel - title: User Signup Channel - description: This channel is used to exchange messages about users signing up +name: UserSignupChannel +title: User Signup Channel +description: This channel is used to exchange messages about users signing up subscribe: - metadata: - summary: A user signed up. + summary: A user signed up. message: - metadata: - description: A longer description of the message + description: A longer description of the message payload: type: object properties: @@ -749,9 +759,7 @@ Using explicit by-name references to the servers on which the channel is availab ```json { - "metadata": { - "description": "This application publishes WebUICommand messages to an AMQP queue on RabbitMQ brokers in the Staging and Production environments." - }, + "description": "This application publishes WebUICommand messages to an AMQP queue on RabbitMQ brokers in the Staging and Production environments.", "servers": [ "rabbitmqBrokerInProd", "rabbitmqBrokerInStaging", @@ -770,8 +778,7 @@ Using explicit by-name references to the servers on which the channel is availab ``` ```yaml -metadata: - description: This application publishes WebUICommand messages to an AMQP queue on RabbitMQ brokers in the Staging and Production environments. +description: This application publishes WebUICommand messages to an AMQP queue on RabbitMQ brokers in the Staging and Production environments. servers: - rabbitmqBrokerInProd - rabbitmqBrokerInStaging @@ -784,6 +791,39 @@ bindings: ``` +#### Channel Trait Object + +Describes a trait that MAY be applied to an [Channel Object](#channelObject). This object MAY contain any property from the [Channel Object](#channelObject), except `parameters` and `traits`. + +##### Fixed Fields + +Field Name | Type | Description +---|:---:|--- +servers | [`string`] | The servers on which this channel is available, specified as an optional unordered list of names (string keys) of [Server Objects](#serverObject) defined in the [Servers Object](#serversObject) (a map). If `servers` is absent or empty then this channel must be available on all servers defined in the [Servers Object](#serversObject). +subscribe | [Operation Object](#operationObject) | A definition of the SUBSCRIBE operation, which defines the messages produced by the application and sent to the channel. +publish | [Operation Object](#operationObject) | A definition of the PUBLISH operation, which defines the messages consumed by the application from the channel. +bindings | [Channel Bindings Object](#channelBindingsObject) \| [Reference Object](#referenceObject) | A map where the keys describe the name of the protocol and the values describe protocol-specific definitions for the channel. + +This object inherits the fields from [Metadata Object](#metadataObject) and MAY be extended with [Specification Extensions](#specificationExtensions). + +##### Channel Trait Object Example + +```json +{ + "bindings": { + "amqp": { + "is": "queue" + } + } +} +``` + +```yaml +bindings: + amqp: + is: queue +``` + @@ -798,27 +838,24 @@ For example, an operation might describe a chat application use case where a use Field Name | Type | Description ---|:---:|--- operationId | `string` | Unique string used to identify the operation. The id MUST be unique among all operations described in the API. The operationId value is **case-sensitive**. Tools and libraries MAY use the operationId to uniquely identify an operation, therefore, it is RECOMMENDED to follow common programming naming conventions. -metadata | [Metadata Object(#metadataObject)] | A metadata describing the operation. bindings | [Operation Bindings Object](#operationBindingsObject) \| [Reference Object](#referenceObject) | A map where the keys describe the name of the protocol and the values describe protocol-specific definitions for the operation. traits | [[Operation Trait Object](#operationTraitObject) | [Reference Object](#referenceObject) ] | A list of traits to apply to the operation object. Traits MUST be merged into the operation object using the [JSON Merge Patch](https://tools.ietf.org/html/rfc7386) algorithm in the same order they are defined here. message | [Message Object](#messageObject) | [Reference Object](#referenceObject) | Map["oneOf", [[Message Object](#messageObject) | [Reference Object](#referenceObject)]] | A definition of the message that will be published or received by this operation. Map containing a single `oneOf` key is allowed here to specify multiple messages. However, **a message MUST be valid only against one of the message objects.** -This object can be extended with [Specification Extensions](#specificationExtensions). +This object inherits the fields from [Metadata Object](#metadataObject) and MAY be extended with [Specification Extensions](#specificationExtensions). ##### Operation Object Example ```json { "operationId": "registerUser", - "metadata": { - "summary": "Action to sign a user up.", - "description": "A longer description", - "tags": [ - { "name": "user" }, - { "name": "signup" }, - { "name": "register" } - ] - }, + "summary": "Action to sign a user up.", + "description": "A longer description", + "tags": [ + { "name": "user" }, + { "name": "signup" }, + { "name": "register" } + ], "message": { "headers": { "type": "object", @@ -854,13 +891,12 @@ This object can be extended with [Specification Extensions](#specificationExtens ```yaml operationId: registerUser -metadata: - summary: Action to sign a user up. - description: A longer description - tags: - - name: user - - name: signup - - name: register +summary: Action to sign a user up. +description: A longer description +tags: + - name: user + - name: signup + - name: register message: headers: type: object @@ -896,10 +932,9 @@ If you're looking to apply traits to a message, see the [Message Trait Object](# Field Name | Type | Description ---|:---:|--- operationId | `string` | Unique string used to identify the operation. The id MUST be unique among all operations described in the API. The operationId value is **case-sensitive**. Tools and libraries MAY use the operationId to uniquely identify an operation, therefore, it is RECOMMENDED to follow common programming naming conventions. -metadata | [Metadata Object(#metadataObject)] | A metadata describing the operation. bindings | [Operation Bindings Object](#operationBindingsObject) \| [Reference Object](#referenceObject) | A map where the keys describe the name of the protocol and the values describe protocol-specific definitions for the operation. -This object can be extended with [Specification Extensions](#specificationExtensions). +This object inherits the fields from [Metadata Object](#metadataObject) and MAY be extended with [Specification Extensions](#specificationExtensions). ##### Operation Trait Object Example @@ -1162,12 +1197,11 @@ Field Name | Type | Description correlationId | [Correlation ID Object](#correlationIdObject) | [Reference Object](#referenceObject) | Definition of the correlation ID used for message tracing or matching. schemaFormat | `string` | A string containing the name of the schema format used to define the message payload. If omitted, implementations should parse the payload as a [Schema object](#schemaObject). When the payload is defined using a `$ref` to a remote file, it is RECOMMENDED the schema format includes the file encoding type to allow implementations to parse the file correctly. E.g., adding `+yaml` if content type is `application/vnd.apache.avro` results in `application/vnd.apache.avro+yaml`.

Check out the [supported schema formats table](#messageObjectSchemaFormatTable) for more information. Custom values are allowed but their implementation is OPTIONAL. A custom value MUST NOT refer to one of the schema formats listed in the [table](#messageObjectSchemaFormatTable). contentType | `string` | The content type to use when encoding/decoding a message's payload. The value MUST be a specific media type (e.g. `application/json`). When omitted, the value MUST be the one specified on the [defaultContentType](#defaultContentTypeString) field. -metadata | [Metadata Object(#metadataObject)] | A metadata describing the message. bindings | [Message Bindings Object](#messageBindingsObject) \| [Reference Object](#referenceObject) | A map where the keys describe the name of the protocol and the values describe protocol-specific definitions for the message. examples | [[Message Example Object](#messageExampleObject)] | List of examples. traits | [[Message Trait Object](#messageTraitObject) | [Reference Object](#referenceObject)] | A list of traits to apply to the message object. Traits MUST be merged into the message object using the [JSON Merge Patch](https://tools.ietf.org/html/rfc7386) algorithm in the same order they are defined here. The resulting object MUST be a valid [Message Object](#messageObject). -This object can be extended with [Specification Extensions](#specificationExtensions). +This object inherits the fields from [Metadata Object](#metadataObject) and MAY be extended with [Specification Extensions](#specificationExtensions). ##### Schema formats table @@ -1191,17 +1225,15 @@ Name | Allowed values | Notes ```json { - "metadata": { - "name": "UserSignup", - "title": "User signup", - "summary": "Action to sign a user up.", - "description": "A longer description", - "tags": [ - { "name": "user" }, - { "name": "signup" }, - { "name": "register" } - ] - }, + "name": "UserSignup", + "title": "User signup", + "summary": "Action to sign a user up.", + "description": "A longer description", + "tags": [ + { "name": "user" }, + { "name": "signup" }, + { "name": "register" } + ], "contentType": "application/json", "headers": { "type": "object", @@ -1256,15 +1288,14 @@ Name | Allowed values | Notes ``` ```yaml -metadata: - name: UserSignup - title: User signup - summary: Action to sign a user up. - description: A longer description - tags: - - name: user - - name: signup - - name: register +name: UserSignup +title: User signup +summary: Action to sign a user up. +description: A longer description +tags: + - name: user + - name: signup + - name: register contentType: application/json headers: type: object @@ -1304,17 +1335,15 @@ Example using Avro to define the payload: ```json { - "metadata": { - "name": "UserSignup", - "title": "User signup", - "summary": "Action to sign a user up.", - "description": "A longer description", - "tags": [ - { "name": "user" }, - { "name": "signup" }, - { "name": "register" } - ] - }, + "name": "UserSignup", + "title": "User signup", + "summary": "Action to sign a user up.", + "description": "A longer description", + "tags": [ + { "name": "user" }, + { "name": "signup" }, + { "name": "register" } + ], "schemaFormat": "application/vnd.apache.avro+json;version=1.9.0", "payload": { "$ref": "path/to/user-create.avsc#/UserCreate" @@ -1323,15 +1352,14 @@ Example using Avro to define the payload: ``` ```yaml -metadata: - name: UserSignup - title: User signup - summary: Action to sign a user up. - description: A longer description - tags: - - name: user - - name: signup - - name: register +name: UserSignup +title: User signup +summary: Action to sign a user up. +description: A longer description +tags: + - name: user + - name: signup + - name: register schemaFormat: 'application/vnd.apache.avro+yaml;version=1.9.0' payload: $ref: 'path/to/user-create.avsc/#UserCreate' @@ -1357,11 +1385,10 @@ Field Name | Type | Description correlationId | [Correlation ID Object](#correlationIdObject) | [Reference Object](#referenceObject) | Definition of the correlation ID used for message tracing or matching. schemaFormat | `string` | A string containing the name of the schema format/language used to define the message payload. If omitted, implementations should parse the payload as a [Schema object](#schemaObject). contentType | `string` | The content type to use when encoding/decoding a message's payload. The value MUST be a specific media type (e.g. `application/json`). When omitted, the value MUST be the one specified on the [defaultContentType](#defaultContentTypeString) field. -metadata | [Metadata Object(#metadataObject)] | A metadata describing the message. bindings | [Message Bindings Object](#messageBindingsObject) \| [Reference Object](#referenceObject) | A map where the keys describe the name of the protocol and the values describe protocol-specific definitions for the message. examples | [[Message Example Object](#messageExampleObject)] | List of examples. -This object can be extended with [Specification Extensions](#specificationExtensions). +This object inherits the fields from [Metadata Object](#metadataObject) and MAY be extended with [Specification Extensions](#specificationExtensions). ##### Message Trait Object Example @@ -1591,6 +1618,8 @@ Field Name | Type | Description securitySchemes| Map[`string`, [Security Scheme Object](#securitySchemeObject) \| [Reference Object](#referenceObject)] | An object to hold reusable [Security Scheme Objects](#securitySchemeObject). parameters | Map[`string`, [Parameter Object](#parameterObject) \| [Reference Object](#referenceObject)] | An object to hold reusable [Parameter Objects](#parameterObject). correlationIds | Map[`string`, [Correlation ID Object](#correlationIdObject) \| [Reference Object](#referenceObject)] | An object to hold reusable [Correlation ID Objects](#correlationIdObject). + serverTraits | Map[`string`, [Server Trait Object](#serverTraitObject) \| [Reference Object](#referenceObject)] | An object to hold reusable [Server Trait Objects](#serverTraitObject). + channelTraits | Map[`string`, [Channel Trait Object](#channelTraitObject) \| [Reference Object](#referenceObject)] | An object to hold reusable [Channel Trait Objects](#channelTraitObject). operationTraits | Map[`string`, [Operation Trait Object](#operationTraitObject) \| [Reference Object](#referenceObject)] | An object to hold reusable [Operation Trait Objects](#operationTraitObject). messageTraits | Map[`string`, [Message Trait Object](#messageTraitObject) \| [Reference Object](#referenceObject)] | An object to hold reusable [Message Trait Objects](#messageTraitObject). serverBindings | Map[`string`, [Server Bindings Object](#serverBindingsObject) \| [Reference Object](#referenceObject)] | An object to hold reusable [Server Bindings Objects](#serverBindingsObject). @@ -1648,9 +1677,7 @@ my.org.User "url": "development.gigantic-server.com", "protocol": "amqp", "protocolVersion": "0.9.1", - "metadata": { - "description": "Development server" - } + "description": "Development server" } }, "channels": { @@ -1664,18 +1691,16 @@ my.org.User }, "messages": { "userSignUp": { - "metadata": { - "summary": "Action to sign a user up.", - "description": "Multiline description of what this action does.\nHere you have another line.\n", - "tags": [ - { - "name": "user" - }, - { - "name": "signup" - } - ] - }, + "summary": "Action to sign a user up.", + "description": "Multiline description of what this action does.\nHere you have another line.\n", + "tags": [ + { + "name": "user" + }, + { + "name": "signup" + } + ], "headers": { "type": "object", "properties": { @@ -1754,8 +1779,7 @@ components: url: development.gigantic-server.com protocol: amqp protocolVersion: 0.9.1 - metadata: - description: Development server + description: Development server channels: user/signedup: subscribe: @@ -1763,14 +1787,13 @@ components: $ref: "#/components/messages/userSignUp" messages: userSignUp: - metadata: - summary: Action to sign a user up. - description: | - Multiline description of what this action does. - Here you have another line. - tags: - - name: user - - name: signup + summary: Action to sign a user up. + description: | + Multiline description of what this action does. + Here you have another line. + tags: + - name: user + - name: signup headers: type: object properties: