|
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