
# 创建工作流-CreateWorkflow
#### 功能介绍
本接口用于直接创建Data+工作流。
#### 授权信息
账号具备所有API的调用权限，如果使用账号下的IAM用户调用当前API，该IAM用户需具备调用API所需的权限。
如果使用角色与策略授权，具体权限要求请参见[权限及授权项说明](https://support.huaweicloud.com/api-dwr/dwr_07_0050.html)。
#### URI
POST /v3/{project_id}/workflows/{graph_name}
#### 请求消息样式
```
POST /v2/workflows/{graph_name}?x-workflow-create HTTP/1.1
Host: obs.cn-north-4.myhuaweicloud.com 
Authorization: authorization
Content-Type: application/json
Content-Length: length
Date: date
policy json body
```
#### 请求消息参数
表1请求消息参数 
| 名称         | 是否必选 | 参数类型   | 说明    | 约束                                                 |
|:---|:---|:---|:---|:---|
| graph_name | 是    | String | 工作流名称 | 名称必须以字母或数字开头，只能由字母、数字、下划线和中划线组成，长度小于等于64个字符，且不能重名。 |
   
#### 请求消息头
该请求使用公共消息头，具体参见[表3](https://support.huaweicloud.com/api-dwr/dwr_07_0008.html#dwr_07_0008__zh-cn_topic_0121682347_table1986821153312)。
#### 请求消息元素
表2参数说明 
| 名称          | 是否必选 | 参数类型                                                                      | 说明            | 约束                                                                                                                                                                                                                                                                                                                                                                       |
|:---|:---|:---|:---|:---|
| description | 否    | String                                                                    | 工作流的描述        | 长度最小为0，最长为256，可以是数字、大小写字母以及英文的逗号，句号，冒号，中划线，下划线，空格。                                                                                                                                                                                                                                                                                                                       |
| states      | 否    | Array of [State] | 工作流的编排定义      | - 必须有TYPE，TYPE值必须是3种State（DELAY，OPERATION，END）中一种。  - 每个state的名字是1-80长度的只含数字，字母，-和_的String。   |
| inputs      | 否    | Array of [Input]  | 工作流中用户可修改参数列表 | -                                                                                                                                                                                                                                                                                                                                                                        |
   
 表3State公共域说明 
| 名称                 | 是否必选 | 参数类型    | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   | 约束                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
|:---|:---|:---|:---|:---|
| start              | 否    | Boolean | 标识开始的state，图中必须且只有一个start为true的state。                                                                                                                                                                                                                                                                                                                                                                                                                                                                | 有且只有一个start为true的state。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| type               | 是    | string  | 枚举类型。 - DELAY：表示延迟等待。  - OPERATION：表示运行。  - END：表示结束。   | 枚举类型。 - DELAY：表示延迟等待。  - OPERATION：表示运行。  - END：表示结束。   |
| payload_filter_in  | 否    | string  | 过滤输入参数，默认值是"$"，表示不过滤。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                | 必须是合法的JSONPath格式。 说明： END State没有payload_filter_in属性。                                                                                                                                                                                                                                                                                                                                              |
| payload_filter_out | 否    | string  | 过滤state的输出结果，默认值是"$"，表示不过滤。                                                                                                                                                                                                                                                                                                                                                                                                                                                                          | 必须是合法的JSONPath格式。 说明： END State没有payload_filter_out属性。                                                                                                                                                                                                                                                                                                                                             |
| state_name         | 是    | string  | state的名字定义。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          | 由小写字母、数字和中划线"-"组成，长度为\[1, 20\]。                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
   
表4OperationState结构体参数说明 
| 名称          | 是否必选 | 参数类型                                                                       | 说明                                     | 约束               |
|:---|:---|:---|:---|:---|
| action_mode | 否    | String                                                                     | 任务action调用的模式，并行或者串行。默认值是"SEQUENTIAL"。 | 只支持"SEQUENTIAL"。 |
| actions     | 是    | Array of [Action] | 定义action的json数组。                       | 当前只能支持1个Action。  |
| next_state  | 是    | String                                                                     | 表示下一个state的名字，String类型，必须是图定义中存在的名字。   | 必须是工作流中的state名字。 |
   
表5DelayState结构体参数说明 
| 名称         | 是否必选 | 参数类型   | 说明                                  | 约束                |
|:---|:---|:---|:---|:---|
| time_delay | 是    | String | 等待的时间，单位秒，int类型。                    | 必须大于0，最大值为86400   |
| next_state | 是    | String | 表示下一个state的名字，String类型，必须是图定义中存在的名字 | 必须是工作流模板中的state名字 |
   
 表6Action结构体参数说明 
| 名称                            | 是否必选 | 参数类型                                                                            | 说明                                                                                     | 约束                                              |
|:---|:---|:---|:---|:---|
| action_name                   | 是    | String                                                                          | action的名字。                                                                             | 要求state中唯一，action的名字是1-20长度的只含数字、字母、-和_的String。 |
| action_template_name          | 是    | String                                                                          | action模板名，见[内置Action模板名描述]。  | -                                               |
| action_template_category      | 是    | String                                                                          | action模板类别，见[内置Action模板名描述]。 | -                                               |
| action_template_provider_name | 是    | String                                                                          | action模板类别，见[内置Action模板名描述]。 | -                                               |
| function                      | 是    | String                                                                          | 用户自定义函数URN。                                                                            | function与function_template只能设置其中一个。             |
| function_template             | 是    | String                                                                          | 系统内置的函数模板URN。                                                                          | function与function_template只能设置其中一个。             |
| invocation_mode               | 否    | String                                                                          | 调用模式。                                                                                  | 值必须是"SYNC"。                                     |
| results                       | 否    | Array of [ActionResult] | Action失败后的捕获重试机制。                                                                      | 值是一个包含result定义的json数组，results如果存在时，size\>=0。    |
| timeout                       | 否    | Int                                                                             | Action的超时时间，最长等待时间。默认值是30s。                                                            | 大于等于0且小于等于300的整型，等于0时等同于不设置。                    |
| payload_filter                | 否    | String                                                                          | 对结果进行过滤的路径，默认是"$"。                                                                     | 必须是合法的JSONPath格式。                               |
| dynamic_source                | 否    | Map                                                                             | 在创建工作流时会根据OBS自定义的函数模板创建属于用户的function，并指定该参数设置的参数值。                                     | 必须是指定的参数名称，否则不生效。                               |
   
 表7ActionResult结构体参数说明 
| 名称             | 是否必选 | 参数类型    | 说明                                                                                              | 约束                                                                                                                                                                               |
|:---|:---|:---|:---|:---|
| match          | 是    | String  | 表示匹配的错误。                                                                                        | MatchAny、States.ActionFailed、States.PermissionError、States.ParameterError、States.NotFound、States.TooManyRequests、States.FunctionStageUnavailable、States.FunctionStageOtherErrors |
| retry_interval | 否    | Int     | 表示重试的间隔时间，单位秒。 取值区间：\[0, 86400\]            | 是\>=0的整型。                                                                                                                                                                        |
| max_retry      | 否    | Int     | 表示最大重试次数，没有设置时默认为3，等于0时表示不重试。 取值区间：\[0, 10\] | \>=0的整型。                                                                                                                                                                         |
| next_state     | 否    | String  | 表示下一个state的名字，String类型，必须是图定义中存在的名字。                                                            | 必须是工作流模板中的state名字。                                                                                                                                                               |
| is_terminal    | 是    | Boolean | 表示是否异常中断该Action，默认为False。                                                                       | 注：如果设置为True，那么不必设置nex-state; 如果设置为False，则必须设置next-state。                                                                                                                         |
   
 表8内置Action模板名描述 
| 内置Action模板名     | 描述      | Category（分类）        | provider_name（提供商名称） | 分类描述 |
|:---|:---|:---|:---|:---|
| MediaTranscode  | 视频转码    | MediaProcess        | op_svc_obs           | 视频处理 |
| MediaRemux      | 视频转封装   | MediaProcess        | op_svc_obs           | 视频处理 |
| MediaMetadata   | 视频元信息   | MediaProcess        | op_svc_obs           | 视频处理 |
| MediaThumbnail  | 视频截图    | MediaProcess        | op_svc_obs           | 视频处理 |
| NotificationSMN | SMN消息通知 | NotificationProcess | op_svc_obs           | 消息通知 |
   
 表9Input结构体参数说明 
| 名称                      | 是否必选 | 参数类型                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         | 约束                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
|:---|:---|:---|:---|:---|
| parameter_name          | 是    | String                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       | 由小写字母、数字和中划线"-"组成，长度为\[1, 20\]。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            | 输入参数名称。最多可定义60个，且命名必须唯一。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
| type                    | 是    | - String：字符串  - Integer：数字  - Float：浮点数  - Boolean：布尔值  - List：列表  - Map：集合   | -                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          | 参数类型。有如下几种： - String：字符串  - Integer：数字  - Float：浮点数  - Boolean：布尔值  - List：列表  - Map：集合   |
| value_type              | 否    | - String：字符串  - Integer：数字  - Float：浮点数                                                                                                                                                                                                                                                                                                                                                                                 | -                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          | 列表类型参数值类型。有如下几种： - String：字符串  - Integer：数字  - Float：浮点数   只支持原子类型。                                                                                                                                                                                                                                                                                                                                                                       |
| template_parameter_name | 否    | String                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       | 由小写字母、数字和中划线"-"组成，长度为\[1, 20\]。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            | 当多个同action template在一个工作流时，增加字段做国际化。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| parameter_value         | 否    | 根据类型传入的参数值                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   | constraints定义的约束。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          | 参数值。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| description             | 否    | String                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       | 长度为\[0, 256\]。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             | 参数描述信息。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| default                 | 否    | String                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       | 默认值信息可在创建工作流实例时由外部输入替换；如果未填写默认值，外部输入将必须填写这个参数的值。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           | 默认值的类型和定义的参数类型必须统一。如果出现不一致，解析器可能会进行自动转换而导致出现与预期不符合的情况。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
| label                   | 否    | String                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       | 长度为\[0, 64\]。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              | 参数的标签，此处定义的标签可在创建堆栈时进行分类展示。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
| constraints             | 否    | Map                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          | 约束条件有以下几种，一个输入参数对每一种条件都只能定义一个规则。约束的多个条件中只要有一条不满足，即将认定参数非法。 - equal：约定参数的value值必须等于特定值。  - valid_values：参数的有效值，定义一个数组。  - regex：参数需要满足某个正则条件，必须是字符串类型才可以进行匹配。  - invalid_values：参数的无效值范围，如果参数值定义在其中，将会认为无效而报错。   | 参数约束，用于约束可以定义输入参数的合法值范围。 例如：当输入参数不等于obs时，则会认定参数非法。 ``` "constraints": { "equal": "obs" } ``` 例如：输出参数值可以从TCP、UDP中选取一个。 ``` "constraints": { "valid_values": ["TCP", "UDP" ] } ``` 例如：当输入参数不满足正则条件时，则会认定参数非法。 ``` "constraints": { "valid_values": ["TCP", "UDP" ] } ``` 例如：当输入参数为1或12时，则会认定参数非法。 ``` "constraints": { "invalid_values": ["1", "12" ] } ```                                                                                                                                                                                                                                                      |
| invisible               | 否    | Boolean                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      | 输入参数的invisible设置为true时，返回值为\*\*\*\*\*\*。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   | 查询是否回显。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
   
#### 响应消息样式
```
HTTP/1.1 status_code 
Date: date 
Content-Length: length 
X-Request-ID: obs request id
json body
```
#### 响应消息头
该请求的响应消息使用公共消息头，具体请参考[响应消息头](https://support.huaweicloud.com/api-dwr/dwr_07_0011.html#dwr_07_0011__zh-cn_topic_0170155703_zh-cn_topic_0113746487_section61333484715)。
#### 响应消息元素
| 名称         | 参数类型   | 说明        |
|:---|:---|:---|
| graph_name | String | 工作流名称。    |
| graph_urn  | String | 工作流的URN。  |
| created_at | String | 工作流创建的时间。 |
   
#### 错误响应消息
无特殊错误，所有错误已经包含在[错误码](https://support.huaweicloud.com/api-dwr/ErrorCode_0.html)中。
#### 请求示例
```
POST /v2/workflows/{graph_name}?x-workflow-create HTTP/1.1
Host: obs.cn-north-4.myhuaweicloud.com 
Host: obs.region.myhuaweicloud.com
Host: obs.region.myhuaweicloud.eu
Host: obs.region.example.com
Date: Thu, 27 Aug 2020 12:38:10 GMT
Authorization: OBS H4IPJX0TQTHTHEBQQCEC:sc2PM13Wlfcoc/YZLK0MwsI2Zpo=
Content-Type: application/json
Content-Length: 100
{
    "description": "a demo of graph",
    "inputs": [{
        "parameter_name": "param1",
        "default": "TCP",
        "parameter_value": "TCP",
        "template_parameter_name": "param",
        "type": "string",
        "label": "action1",
        "constraints": {
            "valid_values": ["TCP", "UDP"]
        },
        "invisible": true,
        "description": "description param1"
    }],
    "states": [{
        "start": true,
        "state_name": "operation",
        "payload_filter_in": "$",
        "payload_filter_out": "$",
        "type": "OPERATION",
        "action_mode": "SEQUENTIAL",
        "actions": [{
            "action_name": "action1",
            "action_template_name": "<Action Template name>",
            "action_template_category": "<Action Template category>",
            "action_template_provider_name": "<Action Template provider name>",
            "function_template": "urn:fss:cn-north-5:3f1e6caf808246c68457e660e4bfeb2f:function:default:test",
            "invocation_mode": "SYNC",
            "timeout": 0,
            "payload_filter": "$",
            "dynamic_source": {
                "param1": {
                    "get_input": "$.inputs.param1"
                },
                "param2": {
                    "get_input": "$.inputs.param2"
                }
            }
        }],
        "next_state": "end"
    }, {
        "state_name": "end",
        "type": "END"
    }]
}
```
#### 响应示例
```
HTTP/1.1 201 Created
Server: OBS
Date: Thu, 27 Aug 2020 12:38:10 GMT
Content-Length: 100
X-Request-ID: 000001742FE8FB3CCA20173B00807C43
{
    "graph_name": "test-graph",
    "graph_urn": "urn:obs:cn-north-5:3f1e6caf808246c68457e660e4bfeb2f:graph:test-graph",
    "created_at": "2020-04-23T12:32:11.131Z"
}
```
