Design Model structure

Introduction

The API, domain and integration namespaces modeled in the Solution Designer will be reflected by *.yaml files in the directory /src-design in the related Git repository. Each yaml-file has a defined structure which you can find described below.

Design model yaml structures

Note: Within the yaml files there are often links to other items of the project. Those links are using the paths of the items within the /src-design directory to uniquely identify them.

Agent

An agent is described by a *.yaml file in the folder src-design/domain/<namespaceName>/agent where the identifier is used as the file name (e. g. NewOrderCreatedAgent.yaml)

PropertyTypeTitle/Description
schemaVersion *Enum (of string)Item version, describing what kind of item it is
Must be /v2/agent.schema.json
type *Enum (of string)Type of agent
Supported values:
- "event"
triggerEventLink *StringLink to business event that triggers the agent
mappedBusinessEventLinks *Array of stringLinks to business events that are associated with the agent and can be triggered from it
Can be an empty array
creationTs *StringCreation timestamp in milliseconds
creator *StringCreator of the item
creatorIdStringID of the creator of the item
comments *Array of CommentList of comments, which were added to the item during development
Can be an empty array
documentation *Object of type DocumentationDocumentation information

* Mandatory field

Example file:

schemaVersion: /v2/agent.schema.json
type: event
mappedBusinessEventLinks: []
triggerEventLink: /domain/ord/event/NewOrderCreated
creationTs: '1687780358190'
creator: John Doe
creatorId: 12345678-1234-1234-1234-123456789012
comments:
  - text: Some comment
    creationTs: '1687780358190'
    creator: John Doe
documentation:
  schemaVersion: /v1/documentation.schema.json
  fileLink: /domain/cons/agent/NewOrderCreatedAgent.md
  creationTs: '1687780358190'
  creator: John Doe
  creatorId: 12345678-1234-1234-1234-123456789012

API Dependency

An API Dependency is consisting out of two yaml files in the folder src-design/integration/<namespaceName>/<apiDependencyName>.

meta.yaml

The meta.yaml contains meta information about the modeled API Dependency.

PropertyTypeTitle/Description
schemaVersion *Enum (of string)Item version, describing what kind of item it is
Must be /v1/apiDependency.schema.json
fileLinkStringLink to the associated spec.yaml containing the API specification
localLookupBooleanIndicates whether the API binding should be auto resolved. Usually set to false, when apiBinding is defined
apiBindingStringJSON string defining values for the API Dependency bindings. NOTE: If "URL" is defined, the URL in the Specification file will be overwritten.
creationTs *StringCreation timestamp in milliseconds
creator *StringCreator of the item
creatorIdStringID of the creator of the item
comments *Array of CommentList of comments, which were added to the item during development
Can be an empty array

* Mandatory field

Example file:

schemaVersion: /v1/apiDependency.schema.json
comments: []
creationTs: '1687780358190'
creator: John Doe
creatorId: 12345678-1234-1234-1234-123456789012
fileLink: /integration/petstore/apiDependency/pet/spec
apiBinding: '{ "url": "https://petstore.swagger.io/v2" }'
localLookup: false

spec.yaml

The spec.yaml file contains the uploaded API specification of the API Dependency. It is linked within the meta.yaml file.

Command

A command is described by a *.yaml file in the folder src-design/domain/<namespaceName>/command where the identifier is used as the file name (e. g. CreateOrderCommand.yaml)

PropertyTypeTitle/Description
schemaVersion *Enum (of string)Item version, describing what kind of item it is
Must be /v2/command.schema.json
type *Enum (of string)Type of command
Supported values:
- "factory"
- "instance"
label *StringLabel of the command, used for displaying purposes
shortLabelStringShort label of the command, used for displaying purposes
notesStringFurther notes describing the command
baseEntityLink *StringLink to root entity to which the command is associated
inputEntityLinkStringLink to input entity of the command
inputIsEntityListBooleanIndicates if input entity is a list or not
mappedBusinessErrorLinks *Array of stringLinks to business errors that are associated with the command and can be thrown from it
Can be an empty array
mappedBusinessEventLinks *Array of stringLinks to business events that are associated with the command and can be triggered from it
Can be an empty array
creationTs *StringCreation timestamp in milliseconds
creator *StringCreator of the item
creatorIdStringID of the creator of the item
comments *Array of CommentList of comments, which were added to the item during development
Can be an empty array
documentation *Object of type DocumentationDocumentation information

* Mandatory field

Example file:

schemaVersion: /v2/command.schema.json
comments: []
creationTs: '1687780358190'
creator: John Doe
creatorId: 12345678-1234-1234-1234-123456789012
label: CreateOrderCommand
type: factory
baseEntityLink: /domain/dom1/entity/OrderEntity
inputEntityLink: /domain/dom1/entity/CreateOrderCommand_Input
inputIsEntityList: false
mappedBusinessErrorLinks:
  - /domain/dom1/error/OrderCreationFailed
mappedBusinessEventLinks:
  - /domain/dom1/event/NewOrderCreated
documentation:
  fileLink: /domain/dom1/command/CreateOrderCommand.md
  schemaVersion: /v1/documentation.schema.json
  creationTs: '1687780358190'
  creator: John Doe
  creatorId: 12345678-1234-1234-1234-123456789012

Comment

Comments can be stored at every item during development to leave hints, notes and other information.

PropertyTypeTitle/Description
text *StringThe comment itself
creationTs *StringCreation timestamp in milliseconds
creator *StringCreator of the item

* Mandatory field

Example:

text: Some comment
creationTs: '1687780358190'
creator: John Doe

Database collection

A database collection is described by a *.yaml file in the folder src-design/domain/<namespaceName>/dbCollection where the identifier is used as the file name (e. g. orders.yaml)

PropertyTypeTitle/Description
schemaVersion *Enum (of string)Item version, describing what kind of item it is
Must be /v1/dbCollection.schema.json
creationTs *StringCreation timestamp in milliseconds
creator *StringCreator of the item
creatorIdStringID of the creator of the item
comments *Array of CommentList of comments, which were added to the item during development
Can be an empty array

* Mandatory field

Example file:

schemaVersion: /v1/dbCollection.schema.json
comments: []
creationTs: '1687780358190'
creator: John Doe
creatorId: 12345678-1234-1234-1234-123456789012

Documentation

Within each item, which has a documentation possibility, you can find an object that holds several details around the documentation. E.g. creator information or where the acutal documentation content is stored as this is preserved in a separate *.md file.

PropertyTypeTitle/Description
schemaVersion *Enum (of string)Item version, describing what kind of item it is
Must be "/v1/documentation.schema.json"
fileLink *StringLink to the documentation file
creationTs *StringCreation timestamp in milliseconds
creator *StringCreator of the item
creatorIdStringID of the creator of the item

* Mandatory field

Example:

fileLink: /domain/dom1/command/MyCommand.md
schemaVersion: /v1/documentation.schema.json
creationTs: '1687780358190'
creator: John Doe
creatorId: 12345678-1234-1234-1234-123456789012

Entity

An entity is described by a *.yaml file in the folders src-design/domain/<namespaceName>/entity or src-design/integration/<namespaceName>/entity where the identifier is used as the file name (e. g. Order.yaml)

PropertyTypeTitle/Description
schemaVersion *Enum (of string)Item version, describing what kind of item it is
Must be /v3/entity.schema.json
type *Enum (of string)Type of entity
Supported values:
- "root"
- "entity"
- "external"
label *StringLabel of the entity, used for displaying purposes
shortLabelStringShort label of the entity, used for displaying purposes
notesStringFurther notes describing the entity
isLocallyManagedBooleanWhether the entity is locally managed. This means the entity lives within the context of the Input/Output/Payload of a Service/Command/Event
Default value is false
isAbstractBooleanBoolean value indicating if the entity is abstract
Default value is false
parentLinksArray of stringLinks to entities used as parents of the entity
properties *Array of Property MappingList of properties used to describe the fields of the entity
Can be an empty array
dbCollectionLinkStringLink to the database collection to which the entity is associated
Only filled for entities of type root
constructorPropertiesArray of Property MappingList of properties used to prepare the external entity to reference an external object or call
Only filled for entities of type external
knownEntityLinksArray of stringLinks to entities that could be possible responses that the External Entity may know about
Only filled for entities of type external
creationTs *StringCreation timestamp in milliseconds
creator *StringCreator of the item
creatorIdStringID of the creator of the item
comments *Array of CommentList of comments, which were added to the item during development
Can be an empty array
documentation *Object of type DocumentationDocumentation information

* Mandatory field

Example file:

schemaVersion: /v3/entity.schema.json
type: root
creationTs: '1687780358190'
creator: John Doe
creatorId: 12345678-1234-1234-1234-123456789012
label: Order Entity
shortLabel: Order
notes: An entity that describes an order
isAbstract: false
isLocallyManaged: false
parentLinks:
  - /domain/dom1/entity/GenericOrder
dbCollectionLink: /domain/dom1/dbCollection/orders
properties:
  - mappingType: value
    isMandatory: true
    propertyDefinitionLink: /domain/dom1/propertyDefinition/orderId
    propertyName: orderId
constructorProperties: []
comments: []
documentation:
  fileLink: /domain/dom1/entity/Order.md
  schemaVersion: /v1/documentation.schema.json
  creationTs: '1687780358190'
  creator: John Doe
  creatorId: 12345678-1234-1234-1234-123456789012

Property mapping

Property mappings are used within entities to associate property definitions and entities. Additionally some further information can be stored at the property mapping, which just affects the usage of the property within the entity, but not the property definition itself.

PropertyTypeTitle/Description
propertyDefinitionLink *StringLink to the property definition
propertyName *StringThe name of the property in context of the entity
Can be different from the original identifier in the property definition
isMandatory *BooleanIndicates whether the property is defined as a mandatory field or not
mappingType *Enum (of string)Mapping type
Supported values:
- "value" for all properties that have no range defined
- "range" (in case of properties with type reference, localEntity or externalEntity)
rangeRestrictionLinkStringLink to entity that restricts the range further
Has to be a children of the original property range
minValueStringThe minimum value that can be set for the property
Only for properties of type "currency", "decimal" or "integer"
maxValueStringThe maximum value that can be set for the property
Only for properties of type "currency", "decimal" or "integer"
minLengthStringThe minimum length that the value of the property must have
Only for text type properties
maxLengthStringThe maximum length that the value of the property must have
Only for text type properties
defaultValueStringThe default value for the property
Only for text type properties
validationPatternStringThe validation pattern for the property
Only for text type properties

Example:

propertyDefinitionLink: /domain/dom1/propertyDefinition/orderId
propertyName: orderId
isMandatory: true
mappingType: value
minLength: '1'
maxLength: '26'

Error

An error is described by a *.yaml file in the folders src-design/domain/<namespaceName>/error or src-design/integration/<namespaceName>/error where the identifier is used as the file name (e. g. OrderCancellingFailed.yaml)

PropertyTypeTitle/Description
schemaVersion *Enum (of string)Item version, describing what kind of item it is
Must be /v2/error.schema.json
errorMessage *StringError message
errorDescriptionStringDescription of the business error
creationTs *StringCreation timestamp in milliseconds
creator *StringCreator of the item
creatorIdStringID of the creator of the item
comments *Array of CommentList of comments, which were added to the item during development
Can be an empty array
documentation *Object of type DocumentationDocumentation information

* Mandatory field

Example file:

schemaVersion: /v2/error.schema.json
comments: []
creationTs: '1687780358190'
creator: John Doe
creatorId: 12345678-1234-1234-1234-123456789012
errorMessage: Order cancelling failed
errorDescription: The cancelling of one or many orders failed. Please try again
documentation:
  fileLink: /domain/dom1/error/OrderCancellingFailed.md
  schemaVersion: /v1/documentation.schema.json
  creationTs: '1687780358190'
  creator: John Doe
  creatorId: 12345678-1234-1234-1234-123456789012

Event

An event is described by a *.yaml file in the folder src-design/domain/<namespaceName>/event where the identifier is used as the file name (e. g. NewOrderCreated.yaml)

PropertyTypeTitle/Description
schemaVersion *Enum (of string)Item version, describing what kind of item it is
Must be /v3/event.schema.json
type *Enum (of string)Type of event
Supported values:
- "business"
label *StringLabel of the event, used for displaying purposes
shortLabelStringShort label of the event, used for displaying purposes
notesStringFurther notes describing the event
topicAlias *StringAlias of associated topic binding
payloadTypeStringEvent Payload type
Supported values:
- "schema"
- "entity" (default, but deprecated)
schemaPayloadMetadataObject of type Schema metadataInformation, which schema is used as payload of the event
Is empty if payloadType is entity or no payload is used at all
payloadSchemaReferenceIdStringPayload reference id
payloadEntityLinkStringLink to the entity, which is used as payload for the event
Is empty if payloadType is schema or no payload is used at all
payloadIsEntityListBooleanIndicates if payload entity is list or not
Is empty if payloadType is schema or no payload is used at all
creationTs *StringCreation timestamp in milliseconds
creator *StringCreator of the item
creatorIdStringID of the creator of the item
comments *Array of CommentList of comments, which were added to the item during development
Can be an empty array
documentation *Object of type DocumentationDocumentation information

* Mandatory field

Example file:

schemaVersion: /v3/event.schema.json
comments: []
creationTs: '1687780358190'
creator: John Doe
creatorId: 12345678-1234-1234-1234-123456789012
type: business
label: New order has been created
shortLabel: Order created
notes: An event that describes that an order has been created
topicAlias: new-order-created-topic
payloadType: Schema
schemaPayloadMetadata:
  artifactId: order-details
  groupId: order
  version: '2'
documentation:
  fileLink: /domain/dom1/event/NewOrderCreated.md
  schemaVersion: /v1/documentation.schema.json
  creationTs: '1687780358190'
  creator: John Doe
  creatorId: 12345678-1234-1234-1234-123456789012

Schema metadata

Schema metadata is used within events to describe the necessary information to identify a schema which can be used as event payload.

PropertyTypeTitle/Description
groupId *StringId of apicurio group in which the schema is stored
artifactId *StringUnique id of the schema, how it is stored in the apicurio registry
version *StringUsed version of the schema

* Mandatory field

Example:

groupId: order
artifactId: order-details
version: '2'

Namespace

An event is described by a *.yaml file in the folders

  • src-design/api/<namespaceName>/event

  • src-design/domain/<namespaceName>/event

  • src-design/integration/<namespaceName>/event where the identifier is used as the file name (e. g. dom1.yaml)

PropertyTypeTitle/Description
schemaVersion *Enum (of string)Item version, describing what kind of item it is
Must be /v2/namespace.schema.json
type *Enum (of string)Type of namespace
Supported values:
- "api"
- "domain"
- "integration"
label *StringLabel of the namespace, used for displaying purposes
descriptionStringDescription of the namespace, used for displaying purposes
supportedSpecEnum (of string)Supported API specification for the API Namespace. Is mandatory if type is "api"
Supported values:
- "openApi3.0"
- "swagger2.0"
hostStringBase path under which the API will be published
Only if type is "api"
apiTitleStringTitle of the published API
Only if type is "api"
apiDescriptionStringDescription of the published API
Only if type is "api"
apiVersionStringVersion of the published API
Only if type is "api"
contactNameStringContact name used in the published API
Only if type is "api"
contactEmailStringContact mail used in the published API
Only if type is "api"
contactUrlStringContact url used in the published API
Only if type is "api"
licenseNameStringLicense name used in the published API
Only if type is "api"
licenseUrlStringLicense url used in the published API
Only if type is "api"
termsOfServiceStringTerms of service url used in the published API
Only if type is "api"
ibmBpmIntegrationBooleanDescribes if this namespace is used for integration with IBM Business Process Management
Only if type is "api"
ibmApiConnectIntegrationBooleanDescribes if this namespace is used for integration with IBM API Connect
Only if type is "api"
xIbmNameStringThe display name within IBM API Connect
Only if type is "api"
apiConnectConfigurationsObject of type IBM API Connect ConfigurationConfigurations to add extensions specific to IBM API Connect
Only if type is "api"
descriptionStringLabel of the description, used for displaying purposes
creationTs *StringCreation timestamp in milliseconds
creator *StringCreator of the item
creatorIdStringID of the creator of the item
documentation *Object of type DocumentationDocumentation information

* Mandatory field

Example file:

schemaVersion: /v2/namespace.schema.json
type: domain
creationTs: '1687780358190'
creator: John Doe
creatorId: 12345678-1234-1234-1234-123456789012
label: dom1
documentation:
  fileLink: /domain/dom1/dom1.md
  schemaVersion: /v1/documentation.schema.json
  creationTs: '1687780358190'
  creator: John Doe
  creatorId: 12345678-1234-1234-1234-123456789012

IBM API Connect Configuration

IBM API Connect Configuration is used within API namespaces which should be integrated within IBM API Connect. They hold various information to ease the integration.

PropertyTypeTitle/Description
phase *StringUsed to describe the maturity of the API
Supported values:
- "identified"
- "specified"
- "realized"
testable *BooleanUsed to specify whether the API can be tested using the test tool in the Developer Portal
enforced *BooleanUsed to specify if the API Connect gateway is used to enforce the API
cors *Object of type IBM API Connect Cors SettingsCORS access control for IBM API Connect
type *StringType of API
Supported values:
- "rest"

* *Mandatory field

Example:

phase: identified
testable: true
enforced: true
cors:
  enabled: true
type: rest

IBM API Connect Cors Settings

IBM API Connect Cors settings are used within IBM API Connect Configuration to describe the cores settings when integrating with IBM API Connect.

PropertyTypeTitle/Description
enabled *BooleanUsed to specify whether CORS access control is used for the API

Example:

enabled: true

Property Definition

A property definition is described by a *.yaml file in the folders src-design/domain/<namespaceName>/propertyDefinition or src-design/integration/<namespaceName>/propertyDefinition where the identifier is used as the file name (e. g. orderId.yaml)

PropertyTypeTitle/Description
schemaVersion *Enum (of string)Item version, describing what kind of item it is
Must be /v2/propertyDefinition.schema.json
type *Enum (of string)Type of property
Supported values: boolean, currency, date, decimal, externalReference, geoPoint, integer, localEntity, localizedText, reference, selectionElement, text, text/url, text/email, timestamp
labelStringLabel of the property, used for displaying purposes
shortLabelStringShort label of the property, used for displaying purposes
notesStringFurther notes describing the property
isListBooleanIndicates if property is a list or not
Only if type is "localEntity", "reference" or "externalReference"
rangeLinkStringLink to the range entity
Only if type is "localEntity", "reference" or "externalReference"
decimalPlacesStringThe amount of decimal places specified for the property
Only if type is "decimal"
selectionElementsObject of type Selection ElementEnumeration elements specified for the property
Only if type is "selectionElement"

* Mandatory field

Example decimal property rating.yaml:

schemaVersion: /v2/propertyDefinition.schema.json
comments: []
creationTs: '1687780358190'
creator: John Doe
creatorId: 12345678-1234-1234-1234-123456789012
type: decimal
decimalPlaces: '2'
documentation:
  fileLink: /domain/dom1/propertyDefinition/rating.md
  schemaVersion: /v1/documentation.schema.json
  creationTs: '1687780358190'
  creator: John Doe
  creatorId: 12345678-1234-1234-1234-123456789012

Example selection element property orderStatus.yaml:

schemaVersion: /v2/propertyDefinition.schema.json
comments: []
creationTs: '1687780358190'
creator: John Doe
creatorId: 12345678-1234-1234-1234-123456789012
type: selectionElement
selectionElements:
  new:
    notes: 'Order has status new'
  done:
    notes: 'Order has status done'
  cancelled: {}
documentation:
  fileLink: /domain/dom1/propertyDefinition/orderStatus.md
  schemaVersion: /v1/documentation.schema.json
  creationTs: '1687780358190'
  creator: John Doe
  creatorId: 12345678-1234-1234-1234-123456789012

Selection Elements

Selection elements are used within the property definitions of type selectionElement and specify the available keys. Each key can also own notes

PropertyTypeTitle/Description
<anyKey>ObjectObject holding one property notes for further details

Example:

new:
  notes: 'Order has status new'
done:
  notes: 'Order has status done'
cancelled: {}

Service

A service is described by a *.yaml file in the folders src-design/domain/<namespaceName>/service or src-design/integration/<namespaceName>/service where the identifier is used as the file name (e. g. CancelAllOrders.yaml)

PropertyTypeTitle/Description
schemaVersion *Enum (of string)Item version, describing what kind of item it is
Must be /v2/service.schema.json
type *Enum (of string)Type of service
Supported values:
- "domain"
- "integrationRest"
label *StringLabel of the service, used for displaying purposes
shortLabelStringShort label of the service, used for displaying purposes
notesStringFurther notes describing the service
inputEntityLinkStringLink to input entity of the service
inputIsEntityListBooleanIndicates if input entity is a list or not
outputEntityLinkStringLink to output entity of the service
outputIsEntityListBooleanIndicates if output entity is a list or not
mappedBusinessErrorLinks *Array of stringLinks to business errors that are associated with the service and can be thrown from it
Can be an empty array
mappedBusinessEventLinks *Array of stringLinks to business events that are associated with the service and can be triggered from it
Can be an empty array
sagaDetailsObject of type Saga detailsSaga related details if service is used as orchestrator or participant within a saga
creationTs *StringCreation timestamp in milliseconds
creator *StringCreator of the item
creatorIdStringID of the creator of the item
comments *Array of CommentList of comments, which were added to the item during development
Can be an empty array
documentation *Object of type DocumentationDocumentation information

* Mandatory field

Example file:

schemaVersion: /v2/service.schema.json
comments: []
creationTs: '1687780358190'
creator: John Doe
creatorId: 12345678-1234-1234-1234-123456789012
label: CancelAllOrders Service
shortLabel: Cancel orders
type: domain
inputEntityLink: /domain/dom1/entity/Order
inputIsEntityList: true
outputEntityLink: /domain/dom1/entity/CancelOrderCommand_Input
outputIsEntityList: false
mappedBusinessErrorLinks:
  - /domain/dom1/error/OrderCancellingFailed
mappedBusinessEventLinks:
  - /domain/dom1/event/OrderCancelled
documentation:
  fileLink: /domain/dom1/command/CancelAllOrders.md
  schemaVersion: /v1/documentation.schema.json
  creationTs: '1687780358190'
  creator: John Doe
  creatorId: 12345678-1234-1234-1234-123456789012

Saga details

Saga details is used within services to describe the necessary information when the service is chosen to be used in a saga (either as orchestrator or participant)

PropertyTypeTitle/Description
type *Enum (of string)Type of saga item
Supported values:
- "orchestrator"
- "participant"
propagationLevel *Enum (of string)Saga propagation level
Supported values:
- "required"
- "requires_new"
- "mandatory"
- "supports"
- "not_supported"
- "never"
completionMode *Enum (of string)Saga completion mode
Supported values:
- "auto"
- "manual"
hasOnCompensateMethod *BooleanIndicates whether an onCompensate method should be autogenerated
Default value is "false"
hasOnCompleteMethod *BooleanIndicates whether an onComplete method should be autogenerated
Default value is "false"
mappedParticipantLinksArray of stringArray of links to participants that can be called in the orchestrator
Only if type is *"orchestrator"
optionsObjectOption expressions as key value pair, provided as additional information within the implementation
Only if type is *"participant"

* Mandatory field

Orchestrator example:

type: orchestrator
propagationLevel: 'required'
completionMode: 'manual'
hasOnCompensateMethod: true
hasOnCompleteMethod: false
mappedParticipantLinks:
  - /domain/dom1/service/SagaParticipantService1
  - /domain/dom1/service/SagaParticipantService2

Participant example:

type: participant
propagationLevel: 'required'
completionMode: 'manual'
hasOnCompensateMethod: true
hasOnCompleteMethod: false
options:
  opt1: 'value1'
  opt2: 'value2'