65.9K
CodeProject 正在变化。 阅读更多。
Home

制作音乐 – 使用 Azure 协调您的工作流 [第一部分 – Microsoft Flow]

emptyStarIconemptyStarIconemptyStarIconemptyStarIconemptyStarIcon

0/5 (0投票)

2018 年 5 月 30 日

CPOL

9分钟阅读

viewsIcon

3093

使用 Microsoft Flow 执行数据验证的示例。

在本系列中,我们将深入探讨如何使用 Microsoft Azure 平台上的各种产品来协调和组织您系统中的进程。您将获得每个产品的概述、优缺点以及操作方法。

Microsoft Flow 与 Microsoft PowerApps 的公共预览版一起于 2016 年 4 月首次亮相。它主要面向业务用户,请相信我,它远不止是一个管理 SharePoint 或收件箱通知的工具。 😉

Flow 拥有与 Logic Apps(我们稍后会详细介绍)相同的逻辑运算符集,它可以执行 if/else、并行执行、循环和重试等操作。最重要的是,它有免费套餐。这是他们当前的定价模式

最好的消息是?您即将看到的所有内容都可以在 Flow 免费计划中实现

让我们从一个问题陈述开始
当我收到一个 Flow 请求时,我想要

  1. 验证传入的 JSON 请求的架构。
  2. 根据业务规则验证 JSON 请求的内容。
  3. 返回一个指示哪些验证失败以及哪些验证通过的响应。

这似乎相当简单,而且在任何商业环境中都可能相当普遍。将其放在 /validate 端点上,发送请求,您就拥有了一个解耦的验证服务。那么,让我们看看用 Microsoft Flow 来实现这一目标的几种方法吧。

简单的顺序检查

步骤 1:定义我们的架构

让我们像这样定义我们的 Person 架构

{
    "Name" : {
        "First" : "John",
        "Last" : "Doe",
        "Title" : "Mr"
    },
    "Address" : {
        "Line1" : "1234 Anywhere St.",
        "Line2" : null,
        "City" : "Somewhere",
        "State" : "OR",
        "Zip" : "12345",
        "Country" : "United States of America"
    }
}

对于我们的业务规则,我们将强制执行

  1. FirstLast 姓名必须存在且长度大于 1 个字符。
  2. 如果 Address Line2 不为 null,则 Line 1 也不能为 null
  3. City 必须存在。
  4. State 必须存在并且只能是 2 个字母的缩写。
  5. Zip 必须存在并且是 5 个字符。

我们将返回一个如下所示的 JSON

{
    "Errors" : [
        {
            "id" : 1,
            "message" : "First name is empty or less than 1 character"
        },
        { 
            "id" : 3,
            "message" : "Address line 2 is not empty but line 1 is empty"
        },
        ...
    ]
}

步骤 2:让 Flow 响应包含特定架构的 JSON 正文的 HTTP POST 请求

这可以通过 HTTP - Request 连接器来完成。

选择它后,您会注意到一些有趣的事情 (1)

保存 Flow 后,此区域将填充 HTTP 端点,供您调用。只需复制它 (2),即可开始使用了。
现在,我们将使用 Flow 中的此步骤来执行需求 #1:验证 JSON 架构。

使用前面显示的示例输入,我们可以通过单击“使用示例有效负载生成架构”(3) 并粘贴上面的 JSON 正文来生成 JSON 架构。

单击“完成”后,您将在 HTTP – Request 连接器中看到一个生成的 JSON 架构。

您可以手动输入 JSON 架构,但 Flow 在保存前不会验证其是否正确。只有在运行时才会知道是否弄错了。

步骤 3:准备返回的 JSON 值

由于我们将执行一系列步骤并将每个验证的结果放入要发送回的报文中,因此我们需要一种“累加器”变量。请记住,我们说它将是一个数组。幸运的是,Flow 有正是我们需要的东西。

单击“新建步骤”,然后单击“添加操作”

在搜索框中键入 variable,然后选择“初始化变量”

接下来,为变量命名并将其设置为 Array 类型。

现在我们有了一个 Array,可以在验证器运行时将它们的输出添加到其中!

步骤 4:执行我们的第一个验证

FirstLast 姓名必须存在且长度大于 1 个字符。

让我们先处理 First Name,因为 Last Name 的处理方式相同。

单击“新建步骤”,然后单击“添加条件”

瞧,您会看到一个条件框,以及放置您选择的“if true”和“if false”步骤的位置。完美!

对于此检查,条件将简单地是 len(Name.First) > 1(大致的伪代码)。我们来实现它。

在条件框中单击“选择值”,然后注意会发生什么。JSON 架构已用于提供对有效负载属性的某种“智能感知”,这些属性可用于检查。但是,我们需要其中一项的长度,而不仅仅是属性值。因此,切换到“表达式”选项卡,并注意我们在“集合”下有什么。

length() 正是我们要找的。单击它。当光标位于 () 内时,切换回“动态内容”并选择“First”。您应该得到类似这样的内容。

单击“确定”并完成条件的其余部分。

如果失败,我们希望将其添加到输出数组中,因此在条件的“If no”区域中,单击“添加操作”。在搜索中键入 variable,然后选择“追加到数组变量”。添加我们的第一个失败代码。

{ "id" : 1, "message" : "First name is null or less than 2 characters in length" }

由于其余部分只是“重复执行”,让我们来运行一下我们的 Flow。单击右上角的“保存”,然后注意在顶部的 HTTP – Request 触发器操作中,您现在有了一个有效的 URL。

请注意此警告!由于我们提供了要验证的 JSON 架构,所有进入我们 Flow 的请求必须在其标头中包含 Content-Type: application/json

启动 Postman

  1. 将您的 URL 复制到一个新请求中。
  2. 将 HTTP 方法切换为 POST
  3. 添加 Content-Type 标头。
  4. 用本文开头处的示例填充原始正文。

在单击“发送”之前,转到您的 Flow 并单击右上角的“测试”按钮。选择“我将执行触发器操作”

Flow 现在正在等待请求进来,以便向您展示它如何执行路径。在 Postman 中单击“发送”。在 Flow 中,您应该会看到类似这样的内容。

太棒了!它运行了,检查了长度,发现它大于 1,并按预期执行了无操作。让我们将 First Name 设置为 null,将 Flow 设置为等待另一个请求(单击“编辑”,然后再次测试),然后看看会发生什么。

{
    "Name" : {
        "First" : null,
        "Last" : "Doe",
        "Title" : "Mr"
    },
    "Address" : {
        "Line1" : "1234 Anywhere St.",
        "Line2" : null,
        "City" : "Somewhere",
        "State" : "OR",
        "Zip" : "12345",
        "Country" : "United States of America"
    }
}

糟糕

看来我们需要在 length() 之前进行 null 检查。没问题。单击 Flow 上的“编辑”,然后单击当您将鼠标悬停在条件块和“初始化变量”之间时出现的(+)。选择“添加条件”

这次,对于我们的条件表达式,我们需要将 First JSON 属性与 null 进行比较。我们使用 equals() 表达式来实现,如下所示:

现在,我们可以说如果这是true,添加一条错误消息,否则继续进行其他验证。要获得 true,您还必须使用“表达式”面板,只需搜索 true 即可。

因此,让我们将错误消息添加操作放入“If yes”部分,就像我们之前做的那样。

但是,现在我们希望我们之前的条件(长度检查)嵌套在此检查的 false 条件中。轻而易举,只需抓住长度条件的图标,然后将其拖到 If no 空间中。

您现在应该会看到类似这样的内容。

让我们再次使用相同的 null 输入运行一次。

太棒了!

现在来检查结果。如果单击“追加到数组变量 2”步骤,您应该会看到

所以我们得到了一个 null First 姓名,然后我们将一个代表 null 失败的新 JSON 对象定义追加到了数组变量中。太棒了。

现在让我们来处理一个 1 个字符的 First Name 来看看效果。

{
    "Name" : {
        "First" : "J",
        "Last" : "Doe",
        "Title" : "Mr"
    },
    "Address" : {
        "Line1" : "1234 Anywhere St.",
        "Line2" : null,
        "City" : "Somewhere",
        "State" : "OR",
        "Zip" : "12345",
        "Country" : "United States of America"
    }
}

完美!第二个错误消息现在可以只说“小于 2 个字符”,但否则我们就完美了!

现在,请继续实现我们需要的其他验证。

提示:您可以重命名 Flow 中的任何步骤以使其更易读,但前提是另一步骤尚未依赖于它。尝试这样做,使您的条件更易于理解,而不是到处都是“条件 X”。 😉

您应该会得到一个看起来像这样的 Flow。

现在到了最后一部分,将结果返回给调用者。

在底部添加一个新操作,然后搜索“Response”。单击“查看更多”并选择“Request”

然后选择“Request – Response”并输出我们的 output 变量。

让我们来运行一下!使用我们之前的请求,我们现在应该会在 Postman 中收到一个响应。

[
    {
        "id": 1,
        "message": "First name is null or less than 2 characters in length"
    }
]

完美!

调整您的请求以触发部分或全部其他验证,然后观察失败的返回。

但是,如果我们想要更快的速度呢?让我们全部并行执行(也称为扇出/扇入模式)!

单击“初始化变量”步骤下的+,然后选择“添加条件”

将列表中的条件 #2 拖到新创建的并行条件上方。

为其余条件重复此操作,直到您的 Flow 看起来像这样。

现在,我们只需要让Response操作出现在所有并行执行完成后之后

单击 Flow 最底部的“新建步骤”,然后选择“添加操作”。在“选择操作”对话框打开时,将现有的 Response 对象拖到其正下方。

这将在并行执行之外创建它。您现在可以单击“选择操作”对话框上的“取消”

让我们的 Flow 执行一次,您会看到验证是并行处理的,并且可能以任何顺序显示在我们的结果数组对象中,具体取决于谁先完成执行。

您可以通过在编辑时单击左上角的 Flow 名称来重命名您的 Flow,使其更具描述性。

希望您发现这是一次有趣的学习无服务器计算和 Microsoft 的企业级无服务器产品 Flow 的经历。在我看来,它的功能远超您的想象!

此时,您可能想知道“好的,那么……我不能用 Flow 做什么?”或“我不应该什么时候使用这个工具,它太棒了!”。事情是这样的,Flow旨在供业务用户自助服务的方式使用。您无法使用 Flow 执行任何更高级的业务工作流操作,例如使用集成帐户来读取架构等。此外,正如我之前展示的,Flow 最快的检查间隔为 1 分钟。这可能不足以满足更高优先级的业务操作。您只能使用浏览器内编辑器,因此 ALM 故事要受限得多(仅测试、生产)。从管理角度来看,Flow 只提供 DLP 和许可控件,以及 O365 安全与合规日志和 DLP。

如果您想将 Flow 提升到新的水平,请继续关注下一篇文章,我将展示如何使用 Flow 的 IT 专业人员级产品:Logic Apps 来执行相同的过程。您可以在此处找到有关这两者之间更多详细信息。

历史

  • 2018 年 5 月 30 日:初始版本
© . All rights reserved.