property description fixes in spec and schema (#219)

This commit is contained in:
Tihomir Surdilovic 2020-04-01 12:37:01 -04:00
parent 34f82a8def
commit 93fc99f4f3
2 changed files with 85 additions and 80 deletions

View File

@ -1,7 +1,7 @@
{
"$id": "https://wg-serverless.org/serverless-workflow-schema-v01.json",
"$schema": "http://json-schema.org/draft-07/schema#",
"description": "Serverless Workflow is a vendor-neutral specification for defining the model of workflows responsible for orchestrating event-driven serverless applications.",
"description": "Serverless Workflow is a vendor-neutral specification for defining the model of workflows responsible for orchestrating event-driven serverless applications",
"type": "object",
"properties": {
"id": {
@ -25,11 +25,13 @@
},
"schemaVersion": {
"type": "string",
"description": "Serverless Workflow schema version"
"description": "Serverless Workflow schema version",
"minLength": 1
},
"expressionLanguage": {
"type": "string",
"description": "Default expression language to be used throughout the workflow definition"
"description": "Default expression language to be used throughout the workflow definition",
"minLength": 1
},
"dataInputSchema": {
"type": "string",
@ -54,7 +56,7 @@
},
"functions": {
"type": "array",
"description": "Workflow functions",
"description": "Workflow function definitions",
"items": {
"type": "object",
"$ref": "#/definitions/function"
@ -62,7 +64,7 @@
},
"states": {
"type": "array",
"description": "State Definitions",
"description": "State definitions",
"items": {
"anyOf": [
{
@ -106,7 +108,7 @@
},
"extensions": {
"type": "array",
"description": "Workflow Extensions",
"description": "Workflow extensions",
"items": {
"type": "object"
}
@ -127,12 +129,12 @@
"type": "object",
"properties": {
"expression": {
"description": "Boolean expression evaluated against state's data output. Must evaluate to true for the transition to be valid.",
"description": "Expression evaluated against state's data output. Must evaluate to true for the transition to be valid",
"$ref": "#/definitions/expression"
},
"nextState": {
"type": "string",
"description": "State to transition to next",
"description": "Name of state to transition to",
"minLength": 1
}
},
@ -165,7 +167,7 @@
"properties": {
"name": {
"type": "string",
"description": "Event unique name",
"description": "Unique event name",
"minLength": 1
},
"source": {
@ -181,7 +183,8 @@
"description": "Context attribute name of the CloudEvent which value is to be used for event correlation"
},
"metadata": {
"$ref": "#/definitions/metadata"
"$ref": "#/definitions/metadata",
"description": "Metadata information"
}
},
"required": [
@ -231,7 +234,7 @@
"description": "Unique action definition name"
},
"functionRef": {
"description": "References a reusable function definition to be invoked",
"description": "References a reusable function definition",
"$ref": "#/definitions/functionref"
},
"actionDataFilter": {
@ -252,7 +255,7 @@
},
"interval": {
"type": "string",
"description": "Specifies the amount of time between retries (ISO 8601 format)"
"description": "Interval value for retry (ISO 8601 repeatable format)"
},
"multiplier": {
"type": "string",
@ -274,16 +277,16 @@
"properties": {
"name": {
"type": "string",
"description": "Function unique name",
"description": "Unique function name",
"minLength": 1
},
"resource": {
"type": "string",
"desription": "Function resource (URI)"
"description": "Function resource (URI)"
},
"type": {
"type": "string",
"description": "Type of function to implement. Can be defined by implementations"
"description": "Function type"
},
"metadata": {
"$ref": "#/definitions/metadata"
@ -300,7 +303,7 @@
"properties": {
"refName": {
"type": "string",
"desription": "Name of the referenced function"
"description": "Name of the referenced function"
},
"parameters": {
"type": "object",
@ -367,8 +370,7 @@
},
"required": [
"name",
"states",
"waitForCompletion"
"states"
]
},
"delaystate": {
@ -519,7 +521,7 @@
},
"onError": {
"type": "array",
"description": "States runtime error handling definitions",
"description": "States error handling definitions",
"items": {
"type": "object",
"$ref": "#/definitions/error"
@ -590,7 +592,7 @@
},
"operationstate": {
"type": "object",
"description": "Defines actions be performed. Does not wait for incoming events.",
"description": "Defines actions be performed. Does not wait for incoming events",
"properties": {
"id": {
"type": "string",
@ -646,7 +648,7 @@
},
"onError": {
"type": "array",
"description": "OnError Definition",
"description": "States error handling definitions",
"items": {
"type": "object",
"$ref": "#/definitions/error"
@ -760,7 +762,7 @@
},
"onError": {
"type": "array",
"description": "OnError Definition",
"description": "States error handling definitions",
"items": {
"type": "object",
"$ref": "#/definitions/error"
@ -851,7 +853,7 @@
},
"choices": {
"type": "array",
"description": "Defines an ordered set of Match Rules against the input data to this state",
"description": "Defines matching rules evaluated against state data",
"items": {
"anyOf": [
{
@ -875,7 +877,7 @@
},
"onError": {
"type": "array",
"description": "OnError Definition",
"description": "States error handling definitions",
"items": {
"type": "object",
"$ref": "#/definitions/error"
@ -925,7 +927,7 @@
"properties": {
"id": {
"type": "string",
"description": "Unique State id",
"description": "Unique state id",
"minLength": 1
},
"name": {
@ -950,18 +952,18 @@
"waitForCompletion": {
"type": "boolean",
"default": false,
"description": "Workflow execution must wait for sub-workflow to finish before continuing."
"description": "Workflow execution must wait for sub-workflow to finish before continuing"
},
"workflowId": {
"type": "string",
"description": "Sub-workflow unique id."
"description": "Sub-workflow unique id"
},
"stateDataFilter": {
"$ref": "#/definitions/statedatafilter"
},
"onError": {
"type": "array",
"description": "OnError Definition",
"description": "States error handling definitions",
"items": {
"type": "object",
"$ref": "#/definitions/error"
@ -1028,7 +1030,7 @@
"properties": {
"id": {
"type": "string",
"description": "Unique State id",
"description": "Unique state id",
"minLength": 1
},
"name": {
@ -1138,7 +1140,7 @@
},
"inputCollection": {
"type": "string",
"description": "JSONPath expression selecting an JSON array element of the states data input"
"description": "JSONPath expression selecting a JSON array element of the states data input"
},
"outputCollection": {
"type": "string",
@ -1146,7 +1148,7 @@
},
"inputParameter": {
"type": "string",
"description": "JSONPath expression specifying an JSON object field of the states data input. For each parallel iteration, this field will get populated with a unique element of the inputCollection array"
"description": "JSONPath expression specifying a JSON object field of the states data input. For each parallel iteration, this field will get populated with a unique element of the inputCollection array"
},
"max": {
"type": "integer",
@ -1218,7 +1220,7 @@
}
},
"transition": {
"description": "Next transition of the workflow after subflow has completed",
"description": "Next transition of the workflow after state has completed",
"$ref": "#/definitions/transition"
},
"dataInputSchema": {
@ -1282,7 +1284,7 @@
},
"callbackstate": {
"type": "object",
"description": "This state performs an action, then waits for the callback event that denotes completion of the action.",
"description": "This state performs an action, then waits for the callback event that denotes completion of the action",
"properties": {
"id": {
"type": "string",
@ -1411,7 +1413,7 @@
"properties": {
"path": {
"type": "string",
"description": "JSONPath that selects the value of the input data to be matched"
"description": "JSONPath that selects an element of state data"
},
"value": {
"type": "string",
@ -1519,7 +1521,7 @@
},
"expression": {
"type": "object",
"description": "Defines the expression language and body of the expression.",
"description": "Defines the expression language and body of the expression",
"properties": {
"language": {
"type": "string",
@ -1527,7 +1529,7 @@
},
"body": {
"type": "string",
"description": "The expression body."
"description": "The expression body"
}
},
"required": [

View File

@ -132,7 +132,7 @@ As mentioned, implementation compliance is based on the workflow definition lang
| [dataInputSchema](#Workflow-Data-Input) | URI to JSON Schema that workflow data input adheres to | string | no |
| [dataOutputSchema](#Workflow-data-output) | URI to JSON Schema that workflow data output adheres to | string | no |
| [events](#Event-Definition) | Workflow event definitions. Defines events that can be consumed or produced | array | no |
| [functions](#Function-Definition) | Workflow functions | array | no |
| [functions](#Function-Definition) | Workflow function definitions | array | no |
| [states](#State-Definition) | Workflow states | array | yes |
| [extensions](#Extending) | Workflow custom extensions | array | no |
| [metadata](#Workflow-Metadata) | Metadata information| object | no |
@ -144,7 +144,7 @@ As mentioned, implementation compliance is based on the workflow definition lang
{
"$id": "https://wg-serverless.org/workflow.schema",
"$schema": "http://json-schema.org/draft-07/schema#",
"description": "Vendor-neutral and portable specification that standardizes the definition of serverless application flows",
"description": "Serverless Workflow is a vendor-neutral specification for defining the model of workflows responsible for orchestrating event-driven serverless application",
"type": "object",
"properties": {
"id": {
@ -168,7 +168,8 @@ As mentioned, implementation compliance is based on the workflow definition lang
},
"schemaVersion": {
"type": "string",
"description": "Serverless Workflow schema version"
"description": "Serverless Workflow schema version",
"minLength": 1
},
"expressionLanguage": {
"type": "string",
@ -189,7 +190,7 @@ As mentioned, implementation compliance is based on the workflow definition lang
},
"functions": {
"type": "array",
"description": "Workflow functions",
"description": "Workflow function definitions",
"items": {
"type": "object",
"$ref": "#/definitions/function"
@ -271,8 +272,8 @@ Following figure describes the main workflow definition blocks.
| --- | --- | --- | --- |
| name | Unique function name | string | yes |
| resource | Function resource (URI) | string | yes |
| type | Function type. Can be defined by implementations. | string | no |
| [metadata](#Workflow-Metadata) | Metadata information| object | no |
| type | Function type | string | no |
| [metadata](#Workflow-Metadata) | Metadata information | object | no |
<details><summary><strong>Click to view JSON Schema</strong></summary>
@ -282,7 +283,7 @@ Following figure describes the main workflow definition blocks.
"properties": {
"name": {
"type": "string",
"description": "Function unique name",
"description": "Unique function name",
"minLength": 1
},
"resource": {
@ -291,10 +292,11 @@ Following figure describes the main workflow definition blocks.
},
"type": {
"type": "string",
"description": "Type of function to implement. Can be defined by implementations"
"description": "Function type"
},
"metadata": {
"$ref": "#/definitions/metadata"
"$ref": "#/definitions/metadata",
"description": "Metadata information"
}
},
"required": ["name", "resource"]
@ -317,7 +319,7 @@ Since function definitions are reusable, their data input parameters are defined
| source | CloudEvent source | string | yes |
| type | CloudEvent type | string | yes |
| correlationToken | Context attribute name of the CloudEvent which value is to be used for event correlation | string | no |
| [metadata](#Workflow-Metadata) | Metadata information| object | no |
| [metadata](#Workflow-Metadata) | Metadata information | object | no |
<details><summary><strong>Click to view JSON Schema</strong></summary>
@ -339,10 +341,11 @@ Since function definitions are reusable, their data input parameters are defined
},
"correlationToken": {
"type": "string",
"description": "Path used for event correlation."
"description": "Context attribute name of the CloudEvent which value is to be used for event correlation"
},
"metadata": {
"$ref": "#/definitions/metadata"
"$ref": "#/definitions/metadata",
"description": "Metadata information"
}
},
"required": ["name", "source", "type"]
@ -435,7 +438,7 @@ States define building blocks of the Serverless Workflow. The specification defi
| **[SubFlow](#SubFlow-State)** | Represents the invocation of another workflow from within a workflow | no | yes | no | yes | no | no |
| **[Relay](#Relay-State)** | Relay state data input to output | no | yes | no | yes | no | no |
| **[ForEach](#ForEach-State)** | Parallel execution of states for each element of a data array | no | yes | no | yes (includes retries) | yes | no |
| **[Callback](#Callback-State)** | Manual decision step. Executes a function and waits for callback event that indicates completion of the manual decision.| yes | yes | yes (including retries) | yes | no | no |
| **[Callback](#Callback-State)** | Manual decision step. Executes a function and waits for callback event that indicates completion of the manual decision | yes | yes | yes (including retries) | yes | no | no |
Following is a detailed description of each of the defined states:
@ -465,7 +468,7 @@ Following is a detailed description of each of the defined states:
```json
{
"type": "object",
"description": "This state is used to wait for events from event sources, then consumes them and invoke one or more actions to run in sequence or parallel.",
"description": "This state is used to wait for events from event sources, then consumes them and invoke one or more actions to run in sequence or parallel",
"properties": {
"id": {
"type": "string",
@ -722,7 +725,7 @@ instance in case it is an end state without performing any actions.
| Parameter | Description | Type | Required |
| --- | --- | --- | --- |
| name | Unique action name | string | no |
| [functionRef](#FunctionRef-Definition) | References a reusable function definition to be invoked | object | yes |
| [functionRef](#FunctionRef-Definition) | References a reusable function definition | object | yes |
| [actionDataFilter](#action-data-filter) | Action data filter definition | object | no |
<details><summary><strong>Click to view JSON Schema</strong></summary>
@ -738,7 +741,7 @@ instance in case it is an end state without performing any actions.
},
"functionRef": {
"$ref": "#/definitions/functionref",
"description": "References a reusable function definition to be invoked"
"description": "References a reusable function definition"
},
"actionDataFilter": {
"$ref": "#/definitions/actiondatafilter"
@ -834,7 +837,7 @@ see the [Workflow Error Handling section](#Workflow-Error-Handling).
```json
{
"type": "object",
"description": "Defines the language and body of expression.",
"description": "Defines the language and body of expression",
"properties": {
"language": {
"type": "string",
@ -865,7 +868,7 @@ expression language used for all defined expressions.
| --- | --- | --- | --- |
| [expression](#Expression-Definition) | Expression that matches against states data output | string | yes |
| interval | Interval value for retry (ISO 8601 repeatable format). For example: "R5/PT15M" (Starting from now repeat 5 times with 15 minute intervals)| string | no |
| multiplier | Multiplier value by which interval increases during each attempt (ISO 8601 time format). For example: "PT3S" meaning the second attempt interval is increased by 3 seconds, the third interval by 6 seconds and so on. | string | no |
| multiplier | Multiplier value by which interval increases during each attempt (ISO 8601 time format). For example: "PT3S" meaning the second attempt interval is increased by 3 seconds, the third interval by 6 seconds and so on | string | no |
| maxAttempts | Maximum number of retry attempts (1 by default). Value of 0 means no retries are performed | integer | no |
<details><summary><strong>Click to view JSON Schema</strong></summary>
@ -881,7 +884,7 @@ expression language used for all defined expressions.
},
"interval": {
"type": "string",
"description": "Specifies retry interval (ISO 8601 repeatable format)"
"description": "Interval value for retry (ISO 8601 repeatable format)"
},
"multiplier": {
"type": "string",
@ -927,7 +930,7 @@ For more information reference the [Workflow Error Handling - Retrying](#workflo
| Parameter | Description | Type | Required |
| --- | --- | --- | --- |
| [expression](#Expression-Definition) | Boolean expression evaluated against state's data output. Must evaluate to true for the transition to be valid. | object | no |
| [expression](#Expression-Definition) | Boolean expression evaluated against state's data output. Must evaluate to true for the transition to be valid | object | no |
| [nextState](#Transitions) | State to transition to next | string | yes |
<details><summary><strong>Click to view JSON Schema</strong></summary>
@ -937,7 +940,7 @@ For more information reference the [Workflow Error Handling - Retrying](#workflo
"type": "object",
"properties": {
"expression": {
"description": "Boolean expression evaluated against state's data output. Must evaluate to true for the transition to be valid.",
"description": "Boolean expression evaluated against state's data output. Must evaluate to true for the transition to be valid",
"$ref": "#/definitions/expression"
},
"nextState": {
@ -1091,7 +1094,7 @@ Once all actions have been performed, a transition to another state can occur.
| id | Unique state id | string | no |
| name |State name | string | yes |
| type |State type | string | yes |
| [choices](#switch-state-choices) |Ordered set of matching rules to determine which state to trigger next | array | yes |
| [choices](#switch-state-choices) | Defines matching rules evaluated against state data | array | yes |
| [stateDataFilter](#state-data-filter) | State data filter | object | no |
| [onError](#Workflow-Error-Handling) | States error handling definitions | array | no |
| default | Next transition of the workflow if there is no match for any choices | object | yes (if end is not defined) |
@ -1105,7 +1108,7 @@ Once all actions have been performed, a transition to another state can occur.
```json
{
"type": "object",
"description": "Permits transitions to other states based on criteria matching.",
"description": "Permits transitions to other states based on criteria matching",
"properties": {
"id": {
"type": "string",
@ -1123,7 +1126,7 @@ Once all actions have been performed, a transition to another state can occur.
},
"choices": {
"type": "array",
"description": "Defines an ordered set of Match Rules against the input data to this state",
"description": "Defines matching rules evaluated against state data",
"items": {
"type": "object",
"anyOf": [
@ -1208,7 +1211,7 @@ There are four types of choices defined:
| Parameter | Description | Type | Required |
| --- | --- | --- | --- |
| path | Path that selects the data input value to be matched | string | yes |
| path | JSONPath that selects an element of state data | string | yes |
| value | Matching value | string | yes |
| operator | Data Input comparator | string | yes |
| [transition](#Transitions) | Next transition of the workflow if there is valid matches | string | yes |
@ -1222,7 +1225,7 @@ There are four types of choices defined:
"properties": {
"path": {
"type": "string",
"description": "JSONPath that selects the data input value to be matched"
"description": "JSONPath that selects an element of state data"
},
"value": {
"type": "string",
@ -1249,7 +1252,7 @@ There are four types of choices defined:
| Parameter | Description | Type | Required |
| --- | --- | --- | --- |
| and | List of choices | array | yes |
| path | Path that selects the data input value to be matched | string | yes |
| path | JSONPath that selects an element of state data | string | yes |
| value | Matching value | string | yes |
| operator | Data Input comparator | string | yes |
| [transition](#Transitions) | Next transition of the workflow if there is valid matches | string | yes |
@ -1267,7 +1270,7 @@ There are four types of choices defined:
"items": {
"path": {
"type": "string",
"description": "JSONPath that selects the data input value to be matched"
"description": "JSONPath that selects an element of state data"
},
"value": {
"type": "string",
@ -1296,7 +1299,7 @@ There are four types of choices defined:
| Parameter | Description | Type | Required |
| --- | --- | --- | --- |
| not | State choice | object | yes |
| path | Path that selects the data input value to be matched | string | yes |
| path | JSONPath that selects an element of state data | string | yes |
| value | Matching value | string | yes |
| operator | Data Input comparator | string | yes |
| [transition](#Transitions) | Next transition of the workflow if there is valid matches | string | yes |
@ -1313,7 +1316,7 @@ There are four types of choices defined:
"properties": {
"path": {
"type": "string",
"description": "JSONPath that selects the data input value to be matched"
"description": "JSONPath that selects an element of state data"
},
"value": {
"type": "string",
@ -1342,7 +1345,7 @@ There are four types of choices defined:
| Parameter | Description | Type | Required |
| --- | --- | --- | --- |
| or | State choices | array | yes |
| path | Path that selects the data input value to be matched | string | yes |
| path | JSONPath that selects an element of state data | string | yes |
| value | Matching value | string | yes |
| operator | Data Input comparator | string | yes |
| [transition](#Transitions) |Next transition of the workflow if there is valid matches | string | yes |
@ -1360,7 +1363,7 @@ There are four types of choices defined:
"items": {
"path": {
"type": "string",
"description": "JSONPath that selects the data input value to be matched"
"description": "JSONPath that selects an element of state data"
},
"value": {
"type": "string",
@ -1648,7 +1651,7 @@ Branches contain one or more states. Each branch must define one [starting state
| --- | --- | --- | --- |
| name | Branch name | string | yes |
| [states](#State-Definition) | States to be executed in this branch | array | yes |
| waitForCompletion | If workflow execution must wait for this branch to finish before continuing | boolean | yes |
| waitForCompletion | If workflow execution must wait for this branch to finish before continuing | boolean | no |
<details><summary><strong>Click to view JSON Schema</strong></summary>
@ -1708,7 +1711,7 @@ Branches contain one or more states. Each branch must define one [starting state
"description": "Workflow execution must wait for this branch to finish before continuing"
}
},
"required": ["name", "states", "waitForCompletion"]
"required": ["name", "states"]
}
```
@ -1751,7 +1754,7 @@ Parallel state must wait for all branches which have this property set to "true"
"properties": {
"id": {
"type": "string",
"description": "Unique State id",
"description": "Unique state id",
"minLength": 1
},
"name": {
@ -1766,11 +1769,11 @@ Parallel state must wait for all branches which have this property set to "true"
"waitForCompletion": {
"type": "boolean",
"default": false,
"description": "Workflow execution must wait for sub-workflow to finish before continuing."
"description": "Workflow execution must wait for sub-workflow to finish before continuing"
},
"workflowId": {
"type": "string",
"description": "Sub-workflow unique id."
"description": "Sub-workflow unique id"
},
"stateDataFilter": {
"$ref": "#/definitions/statedatafilter"
@ -1894,7 +1897,7 @@ If this property is set to false, data access to parent's workflow should not be
"properties": {
"id": {
"type": "string",
"description": "Unique State id",
"description": "Unique state id",
"minLength": 1
},
"name": {
@ -2145,7 +2148,7 @@ This allows you to test if your workflow behaves properly for cases when there a
| type | State type | string | yes |
| inputCollection | JSONPath expression selecting an JSON array element of the states data input | string | yes |
| outputCollection | JSONPath expression specifying where in the states data output to place the final data output of each iteration of the executed states | string | no |
| inputParameter | JSONPath expression specifying an JSON object field of the states data input. For each parallel iteration, this field will get populated with an unique element of the inputCollection array. | string | yes |
| inputParameter | JSONPath expression specifying a JSON object field of the states data input. For each parallel iteration, this field will get populated with an unique element of the inputCollection array | string | yes |
| max | Specifies how upper bound on how many iterations may run in parallel | integer | no |
| timeDelay | Amount of time (ISO 8601 format) to wait between each iteration | string | no |
| [states](#State-Definition) | States to be executed for each of the elements of inputCollection | array | yes |
@ -2182,7 +2185,7 @@ This allows you to test if your workflow behaves properly for cases when there a
},
"inputCollection": {
"type": "string",
"description": "JSONPath expression selecting an JSON array element of the states data input"
"description": "JSONPath expression selecting a JSON array element of the states data input"
},
"outputCollection": {
"type": "string",
@ -2190,7 +2193,7 @@ This allows you to test if your workflow behaves properly for cases when there a
},
"inputParameter": {
"type": "string",
"description": "JSONPath expression specifying an JSON object field of the states data input. For each parallel iteration, this field will get populated with a unique element of the inputCollection array"
"description": "JSONPath expression specifying a JSON object field of the states data input. For each parallel iteration, this field will get populated with a unique element of the inputCollection array"
},
"max": {
"type": "integer",
@ -2263,7 +2266,7 @@ This allows you to test if your workflow behaves properly for cases when there a
}
},
"transition": {
"description": "Next transition of the workflow after subflow has completed",
"description": "Next transition of the workflow after state has completed",
"$ref": "#/definitions/transition"
},
"dataInputSchema": {
@ -2544,7 +2547,7 @@ defined in the orders array of its data input.
| id | Unique state id | string | no |
| name | State name | string | yes |
| type | State type | string | yes |
| [action](#Action-Definition) | Defines the action to be executed. | object | yes |
| [action](#Action-Definition) | Defines the action to be executed | object | yes |
| eventRef | References an unique callback event name in the defined workflow [events](#Event-Definition) | string | yes |
| [timeout](#eventstate-timeout) | Time period to wait from when action is executed until the callback event is received (ISO 8601 format). For example: "PT15M" (wait 15 minutes), or "P2DT3H4M" (wait 2 days, 3 hours and 4 minutes)| string | yes |
| [eventDataFilter](#event-data-filter) | Callback event data filter definition | object | no |
@ -2564,7 +2567,7 @@ defined in the orders array of its data input.
```json
{
"type": "object",
"description": "This state performs an action, then waits for the callback event that denotes completion of the action.",
"description": "This state performs an action, then waits for the callback event that denotes completion of the action",
"properties": {
"id": {
"type": "string",