|
50 | 50 | + [Duration](#duration)
|
51 | 51 | + [HTTP Response](#http-response)
|
52 | 52 | + [HTTP Request](#http-request)
|
| 53 | + + [URI Template](#uri-template) |
53 | 54 |
|
54 | 55 | ## Abstract
|
55 | 56 |
|
@@ -83,7 +84,7 @@ Documents the workflow definition.
|
83 | 84 | | dsl | `string` | `yes` | The version of the DSL used to define the workflow. |
|
84 | 85 | | namespace | `string` | `yes` | The workflow's namespace.<br> |
|
85 | 86 | | name | `string` | `yes` | The workflow's name.<br> |
|
86 |
| -| version | `string` | `yes` | The workflow's [semantic version] |
| 87 | +| version | `string` | `yes` | The workflow's [semantic version](https://semver.org/) | |
87 | 88 | | title | `string` | `no` | The workflow's title. |
|
88 | 89 | | summary | `string` | `no` | The workflow's Markdown summary. |
|
89 | 90 | | tags | `map[string, string]` | `no` | A key/value mapping of the workflow's tags, if any. |
|
|
279 | 280 |
|
280 | 281 | Serverless Workflow defines several default functions that **MUST** be supported by all implementations and runtimes:
|
281 | 282 |
|
282 |
| -- [AsyncAPI](#asyncapi) |
| 283 | +- [AsyncAPI](#asyncapi-call) |
283 | 284 | - [gRPC](#grpc-call)
|
284 | 285 | - [HTTP](#http-call)
|
285 | 286 | - [OpenAPI](#openapi-call)
|
@@ -528,9 +529,9 @@ Allows workflows to iterate over a collection of items, executing a defined set
|
528 | 529 | | Name | Type | Required | Description|
|
529 | 530 | |:--|:---:|:---:|:---|
|
530 | 531 | | for.each | `string` | `no` | The name of the variable used to store the current item being enumerated.<br>Defaults to `item`. |
|
531 |
| -| for.in | `string` | `yes` | A [runtime expression](#runtime-expressions) used to get the collection to enumerate. | |
| 532 | +| for.in | `string` | `yes` | A [runtime expression](./dsl.md/#runtime-expressions) used to get the collection to enumerate. | |
532 | 533 | | for.at | `string` | `no` | The name of the variable used to store the index of the current item being enumerated.<br>Defaults to `index`. |
|
533 |
| -| while | `string` | `no` | A [runtime expression](#runtime-expressions) that represents the condition, if any, that must be met for the iteration to continue. | |
| 534 | +| while | `string` | `no` | A [runtime expression](./dsl.md/#runtime-expressions) that represents the condition, if any, that must be met for the iteration to continue. | |
534 | 535 | | do | [`task`](#task) | `yes` | The task to perform for each item in the collection. |
|
535 | 536 |
|
536 | 537 | ##### Examples
|
|
601 | 602 | room: ${ .room.number }
|
602 | 603 | ```
|
603 | 604 |
|
604 |
| - |
605 | 605 | #### Listen
|
606 | 606 |
|
607 | 607 | Provides a mechanism for workflows to await and react to external events, enabling event-driven behavior within workflow systems.
|
@@ -1073,7 +1073,7 @@ Defines an external resource.
|
1073 | 1073 | | Property | Type | Required | Description |
|
1074 | 1074 | |----------|:----:|:--------:|-------------|
|
1075 | 1075 | | name | `string` | `no` | The name, if any, of the defined resource. |
|
1076 |
| -| uri | `string` | `yes` | The URI at which to get the defined resource. | |
| 1076 | +| uri | [`uri-template`](#uri-template) | `yes` | The URI at which to get the defined resource. | |
1077 | 1077 | | authentication | [`authentication`](#authentication) | `no` | The authentication policy, or the name of the authentication policy, to use when fecthing the resource. |
|
1078 | 1078 |
|
1079 | 1079 | ##### Examples
|
@@ -1208,8 +1208,8 @@ Defines the fundamentals of an 'oauth2' authentication
|
1208 | 1208 |
|
1209 | 1209 | | Property | Type | Required | Description |
|
1210 | 1210 | |----------|:----:|:--------:|-------------|
|
1211 |
| -| authority | `string` | `yes` | The URI that references the OAuth2 authority to use. | |
1212 |
| -| grant | `string` | `yes` | The grant type to use. |
| 1211 | +| authority | [`uri-template`](#uri-template) | `yes` | The URI that references the OAuth2 authority to use. | |
| 1212 | +| grant | `string` | `yes` | The grant type to use. | |
1213 | 1213 | | client.id | `string` | `yes` | The client id to use. |
|
1214 | 1214 | | client.secret | `string` | `no` | The client secret to use, if any. |
|
1215 | 1215 | | scopes | `string[]` | `no` | The scopes, if any, to request the token for. |
|
@@ -1346,7 +1346,7 @@ Defines the [Problem Details RFC](https://datatracker.ietf.org/doc/html/rfc7807)
|
1346 | 1346 |
|
1347 | 1347 | | Property | Type | Required | Description |
|
1348 | 1348 | |----------|:----:|:--------:|-------------|
|
1349 |
| -| type | `string` | `yes` | A URI reference that identifies the [`error`](#error) type. <br><u>For cross-compatibility concerns, it is strongly recommended to use [Standard Error Types](#standard-error-types) whenever possible.<u><br><u>Runtimes **MUST** ensure that the property has been set when raising or escalating the [`error`](#error).<u> | |
| 1349 | +| type | [`uri-template`](#uri-template) | `yes` | A URI reference that identifies the [`error`](#error) type. <br><u>For cross-compatibility concerns, it is strongly recommended to use [Standard Error Types](#standard-error-types) whenever possible.<u><br><u>Runtimes **MUST** ensure that the property has been set when raising or escalating the [`error`](#error).<u> | |
1350 | 1350 | | status | `integer` | `yes` | The status code generated by the origin for this occurrence of the [`error`](#error).<br><u>For cross-compatibility concerns, it is strongly recommended to use [HTTP Status Codes](https://datatracker.ietf.org/doc/html/rfc7231#section-6) whenever possible.<u><br><u>Runtimes **MUST** ensure that the property has been set when raising or escalating the [`error`](#error).<u> |
|
1351 | 1351 | | instance | `string` | `yes` | A [JSON Pointer](https://datatracker.ietf.org/doc/html/rfc6901) used to reference the component the [`error`](#error) originates from.<br><u>Runtimes **MUST** set the property when raising or escalating the [`error`](#error). Otherwise ignore.<u> |
|
1352 | 1352 | | title | `string` | `no` | A short, human-readable summary of the [`error`](#error). |
|
@@ -1685,4 +1685,22 @@ method: get
|
1685 | 1685 | uri: https://petstore.swagger.io/v2/pet/1
|
1686 | 1686 | headers:
|
1687 | 1687 | Content-Type: application/json
|
1688 |
| -``` |
| 1688 | +``` |
| 1689 | + |
| 1690 | +### URI Template |
| 1691 | + |
| 1692 | +The DSL has limited support for URI template syntax as defined by [RFC 6570](https://datatracker.ietf.org/doc/html/rfc6570). Specifically, only the [Simple String Expansion](https://datatracker.ietf.org/doc/html/rfc6570#section-3.2.2) is supported, which allows authors to embed variables in a URI. |
| 1693 | + |
| 1694 | +To substitute a variable within a URI, use the `{}` syntax. The identifier inside the curly braces will be replaced with its value during runtime evaluation. If no value is found for the identifier, an empty string will be used. |
| 1695 | + |
| 1696 | +This has the following limitations compared to runtime expressions: |
| 1697 | + |
| 1698 | +- Only top-level properties can be interpolated within strings, thus identifiers are treated verbatim. This means that `{pet.id}` will be replaced with the value of the `"pet.id"` property, not the value of the `id` property of the `pet` property. |
| 1699 | +- The referenced variable must be of type `string`, `number`, `boolean`, or `null`. If the variable is of a different type an error with type `https://https://serverlessworkflow.io/spec/1.0.0/errors/expression` and status `400` will be raised. |
| 1700 | +- [Runtime expression arguments](./dsl.md#runtime-expression-arguments) are not available for string substitution. |
| 1701 | + |
| 1702 | +#### Examples |
| 1703 | + |
| 1704 | +```yaml |
| 1705 | +uri: https://petstore.swagger.io/v2/pet/{petId} |
| 1706 | +``` |
0 commit comments