You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: schema/functions.json
+37-13Lines changed: 37 additions & 13 deletions
Original file line number
Diff line number
Diff line change
@@ -22,9 +22,7 @@
22
22
}
23
23
]
24
24
},
25
-
"required": [
26
-
"functions"
27
-
],
25
+
"required": ["functions"],
28
26
"definitions": {
29
27
"function": {
30
28
"type": "object",
@@ -40,9 +38,9 @@
40
38
},
41
39
"type": {
42
40
"type": "string",
43
-
"description": "Defines the function type. Is either `rest`, `openapi`,`asyncapi, `rpc`, `graphql`, `odata`, `expression`, or `custom`. Default is `openapi`.",
41
+
"description": "Defines the function type. Is either `http`, `openapi`,`asyncapi, `rpc`, `graphql`, `odata`, `expression`, or `custom`. Default is `openapi`.",
44
42
"enum": [
45
-
"rest",
43
+
"http",
46
44
"openapi",
47
45
"asyncapi",
48
46
"rpc",
@@ -77,9 +75,7 @@
77
75
}
78
76
},
79
77
"additionalProperties": false,
80
-
"required": [
81
-
"resource"
82
-
]
78
+
"required": ["resource"]
83
79
}
84
80
]
85
81
},
@@ -88,10 +84,7 @@
88
84
}
89
85
},
90
86
"additionalProperties": false,
91
-
"required": [
92
-
"name",
93
-
"operation"
94
-
]
87
+
"required": ["name", "operation"]
95
88
},
96
89
"operation": {
97
90
"oneOf": [
@@ -109,8 +102,39 @@
109
102
"type": "object"
110
103
}
111
104
}
105
+
},
106
+
{
107
+
"type": "object",
108
+
"description": "HTTP Function operation definition",
+[Using Functions for OpenAPI Service Invocations](#using-functions-for-openapi-service-invocations)
27
-
+[Using Functions for RESTful Service Invocations](#using-functions-for-restful-service-invocations)
27
+
+[Using Functions for HTTP Service Invocations](#using-functions-for-http-service-invocations)
28
28
+[Using Functions for Async API Service Invocations](#using-functions-for-async-api-service-invocations)
29
29
+[Using Functions for RPC Service Invocations](#using-functions-for-rpc-service-invocations)
30
30
+[Using Functions for GraphQL Service Invocations](#using-functions-for-graphql-service-invocations)
@@ -995,7 +995,7 @@ They can be referenced by their domain-specific names inside workflow [states](#
995
995
Reference the following sections to learn more about workflow functions:
996
996
997
997
* [Using functions for OpenAPI Service invocations](#using-functions-for-openapi-service-invocations)
998
-
+ [Using functions for RESTful Service Invocations](#using-functions-for-rest-service-invocations)
998
+
+ [Using functions for HTTP Service Invocations](#using-functions-for-http-service-invocations)
999
999
* [Using functions for Async API Service Invocations](#Using-Functions-for-Async-API-Service-Invocations)
1000
1000
* [Using functions for gRPC service invocation](#Using-Functions-For-RPC-Service-Invocations)
1001
1001
* [Using functions for GraphQL service invocation](#Using-Functions-For-GraphQL-Service-Invocations)
@@ -1061,11 +1061,7 @@ For example:
1061
1061
1062
1062
Note that the referenced function definition type in this case must be `openapi` (default type).
1063
1063
1064
-
For more information about functions, reference the [Functions definitions](#Function-Definition) section.
1065
-
1066
-
#### Using functions for RESTful Service Invocations
1067
-
1068
-
The specification also supports describing REST invocations in the [functions definition](#Function-Definition) using [OpenAPI Paths Object](https://spec.openapis.org/oas/v3.1.0#paths-object).
1064
+
The specification also supports describing OpenAPI for REST invocations inline in the [functions definition](#Function-Definition) using [OpenAPI Paths Object](https://spec.openapis.org/oas/v3.1.0#paths-object).
1069
1065
1070
1066
Here is an example function definition for REST requests with method `GET` and request target corresponding with [URI Template](https://www.rfc-editor.org/rfc/rfc6570.html) `/users/{id}`:
1071
1067
@@ -1085,7 +1081,7 @@ Here is an example function definition for REST requests with method `GET` and r
1085
1081
}
1086
1082
}
1087
1083
},
1088
-
"type":"rest"
1084
+
"type":"openapi"
1089
1085
}
1090
1086
]
1091
1087
}
@@ -1122,7 +1118,7 @@ Example of the `POST` request sending the state data as part of the body:
1122
1118
"functions":[
1123
1119
{
1124
1120
"name": "createUser",
1125
-
"type": "rest",
1121
+
"type": "openapi",
1126
1122
"operation": {
1127
1123
"/users": {
1128
1124
"post": {
@@ -1219,7 +1215,119 @@ In this case, only the contents of the `user` attribute will be passed to the fu
1219
1215
}
1220
1216
```
1221
1217
1222
-
The specification does not support the [Security Requirement Object](https://spec.openapis.org/oas/v3.1.0#security-requirement-object) since its redundat to function [Auth Definition](#Auth-Definition). If provided, this field is ignored.
1218
+
When inlining the OpenAPI operation, the specification does not support the [Security Requirement Object](https://spec.openapis.org/oas/v3.1.0#security-requirement-object) since its redundat to function [Auth Definition](#Auth-Definition). If provided, this field is ignored.
1219
+
1220
+
For more information about functions, reference the [Functions definitions](#Function-Definition) section.
1221
+
1222
+
#### Using functions for HTTP Service Invocations
1223
+
1224
+
The HTTP function can make HTTP requests to a given endpoint. It can be used in cases a service doesn't have an OpenAPI definition or users require a simple HTTP, curl-style invocation.
1225
+
1226
+
The table below lists the `operation` properties for the `http` function type.
1227
+
1228
+
| Property | Description | Type | Required |
1229
+
| --- | --- | --- | --- |
1230
+
1231
+
| uri | The URI where to send the request | String | yes |
1232
+
| method | The HTTP method according to the [RFC 2616](https://datatracker.ietf.org/doc/html/rfc2616#page-36) | String | yes |
1233
+
| headers | Headers to send in the HTTP call. The `Content-Type` header mandates the body convertion. | Map | no |
1234
+
| cookies | Cookies to send in the HTTP call. | Map | no |
1235
+
1236
+
Note that in the function definition, these values are static. When invoking the function in the `actions` definition, `jq` can be used to set the attribute values.
1237
+
1238
+
Here is a function definition example for a HTTP service operation.
This function can be used later in the workflow definition:
1256
+
1257
+
```json
1258
+
{
1259
+
"states":[
1260
+
{
1261
+
"name": "getpet",
1262
+
"type": "operation",
1263
+
"actions":[
1264
+
{
1265
+
"functionRef": "getPetById",
1266
+
"arguments":{
1267
+
"petId": "${ .pet.id }"
1268
+
}
1269
+
}
1270
+
],
1271
+
"end":true
1272
+
}
1273
+
]
1274
+
}
1275
+
```
1276
+
1277
+
Not that the `arguments` attribute must map the template in the `uri` definition so the underlying engine can map the arguments correctly.
1278
+
1279
+
The `arguments` attribute accepts the following reserved properties when calling a HTTP function type:
1280
+
1281
+
| Property | Description | Type | Required |
1282
+
| --- | --- | --- | --- |
1283
+
1284
+
| body | The HTTP body. If an object, it will be sent as a JSON payload by default if the `Content-Type` header is missing. Otherwise, it will try to convert it based on the `Content-Type` header definition | Object or String | no |
1285
+
| headers | Headers to send in the HTTP call. The `Content-Type` header mandates the body convertion. | Map | no |
1286
+
| cookies | Cookies to send in the HTTP call. | Map | no |
1287
+
1288
+
These attributes are merged with the ones in the function definition.
1289
+
1290
+
The listing below exemplifies how to define and call a HTTP POST endpoint.
1291
+
1292
+
```json
1293
+
{
1294
+
"functions": [
1295
+
{
1296
+
"name": "createPet",
1297
+
"type": "http",
1298
+
"operation": {
1299
+
"method": "POST",
1300
+
"uri": "https://petstore.swagger.io/v2/pet/",
1301
+
"headers": {
1302
+
"Content-Type": "application/json"
1303
+
}
1304
+
}
1305
+
}
1306
+
]
1307
+
},
1308
+
{
1309
+
"states":[
1310
+
{
1311
+
"name":"create-pet",
1312
+
"type":"operation",
1313
+
"actions":[
1314
+
{
1315
+
"functionRef":"createPet",
1316
+
"arguments":{
1317
+
"body": {
1318
+
"name": "Lulu"
1319
+
},
1320
+
"headers": {
1321
+
"my-header": "my-value"
1322
+
}
1323
+
}
1324
+
}
1325
+
],
1326
+
"end":true
1327
+
}
1328
+
]
1329
+
}
1330
+
```
1223
1331
1224
1332
#### Using Functions for Async API Service Invocations
1225
1333
@@ -3294,7 +3402,7 @@ Note that `transition` and `end` properties are mutually exclusive, meaning that
3294
3402
| --- | --- | --- | --- |
3295
3403
| name | Unique function name. Must follow the [Serverless Workflow Naming Convention](#naming-convention) | string | yes |
3296
3404
| operation | See the table "Function Operation description by type" below. | string or object | yes |
3297
-
| type | Defines the function type. Can be either `rest`, `openapi`, `asyncapi`, `rpc`, `graphql`, `odata`, `expression`, or [`custom`](#defining-custom-function-types). Default is `openapi` | enum | no |
3405
+
| type | Defines the function type. Can be either `http`, `openapi`, `asyncapi`, `rpc`, `graphql`, `odata`, `expression`, or [`custom`](#defining-custom-function-types). Default is `openapi` | enum | no |
3298
3406
| authRef | References an [auth definition](#Auth-Definition) name to be used to access to resource defined in the operation parameter | string | no |
3299
3407
| [metadata](#Workflow-Metadata) | Metadata information. Can be used to define custom function information | object | no |
0 commit comments