【问题标题】:Flowgear configurable variable bar for sql query via APIFlowgear 可配置变量栏,用于通过 API 进行 sql 查询
【发布时间】:2014-11-17 13:31:30
【问题描述】:

我有一个包含书籍列表的数据表。下面是我的sql语句:

SELECT `Book`.`id` , `Book`.`name` , `Book`.`isbn` , `Book`.`quantity_in_stock` , `Book`.`price` , (`Book`.`quantity_in_stock` * `Book`.`price`) AS `sales`, concat(`Author`.`name`, ' ', `Author`.`surname`) AS `author`  
FROM `books` AS `Book` 
LEFT JOIN authors AS `Author` 
ON ( `Book`.`author_id` = `Author`.`id` ) 
WHERE  (`Book`.`quantity_in_stock` * `Book`.`price`) > 5000.00

查询运行良好,工作流程也运行良好。但是,我想通过 API 访问它并通过变量 bar 使 5000.00 值可配置。

问题是我如何使这成为可能,以便当我使用下面的端点调用我的 API 时它可以工作?

https://domain.flowgear.io/5000booklist/{sales_value}

我想要的是能够通过 API 重复使用我的工作流程,并且只传递我想要查询表的销售值。销售价值可以是 2000 或 5000,具体取决于我想要实现的目标。

【问题讨论】:

    标签: php mysql integration flowgear


    【解决方案1】:
    1. 添加一个变量 bar 并向其添加一个名为“salesValue”的属性
    2. 在工作流详细信息窗格中,提供以下 URL:“/booklist/{salesValue}” - 大括号中的值必须与变量栏中的属性名称匹配
    3. 添加格式化程序,将包含“WHERE (Book.quantity_in_stock * Book.price) > {salesValue}”的 SQL 模板放入 Expression 属性中,然后添加一个名为 salesValue 的自定义字段并将其固定来自变量 bar salesValue 属性。将转义设置为 SQL。
    4. 获取格式化程序的输出并将其插入 SQL 查询连接器的 SQL 查询属性。
    5. 添加另一个变量 bar,并添加特殊属性 FgResponseBody 和 FgResponseContentType
    6. 将 SQL 结果固定到 FgResponseBody 并将 FgResponseContentType 设置为 'text/xml'

    如果要返回 JSON,请使用 JSON Convert 将 SQL 查询的结果转换为 JSON,然后将其固定到 FgResponseBody 并将 FgResponseContentType 设置为 'application/json'

    【讨论】:

    • 感谢您的简短解释,我能够获得销售价值超过 5000.00 的书籍列表。但是,如果我想在我的 API 调用中使用 post 方法,该方法将销售值作为参数数组('salesValue' => 5000.00) 作为 curl post 字段的一部分,我需要在我的工作流程中配置什么?此时,如果我将工作流程配置为使用 POST 方法,则会收到异常“服务不可用”...谢谢
    • @LuyandaSiko,您找到 POST 方法的任何解决方案了吗?我也面临同样的问题。
    • @LuyandaSiko,你找到如何使用 POST 方法调用 flowgear 工作流的解决方案了吗?请帮助我遇到问题
    • @sanjay 你有什么代码可以告诉我你想要实现的目标吗?在我的 Flowgear 体验期间,我离开了我工作的公司,我没有可以参考的代码。请查看我的博客@www.luyandasiko.wordpress.com 我想我在那里写了一篇文章不知道你能得到你想要的答案。
    • 一定会的。您可以在此处标记我或将问题的链接通过电子邮件发送给我(sikoluyanda@gmail.com),我会看看我能做什么。干杯!
    【解决方案2】:

    @sanjay 我将尝试向您概述我当时按照here 的说明通过 PHP 试验 Flowgear 时所做的事情。

    我不确定您是否还通过 PHP 或任何其他语言调用 Flowgear REST API,但无论如何我认为逻辑应该保持不变。

    我所做的是将 PHP CURL 示例代码包装在一个类中,以便能够重用它。下面是我为一个简单的选择查询编写的代码:

    <?php
    
     //Require the FlowgearConnect class
     require_once '/path/to/flowgear_class_with_api_call.php';
    
    try{
    
       $workflow = new FlowgearConnect(return include 'endpoints.php');
    
       $serial = $_POST['serial'];
       $clientId = $_POST['client_id'];
    
       //Get the results
       $sql = '';
       if(empty($serial)){
         $conditions = sprintf(' `a`.`client_id` = %s AND `a`.`serial` > -1 ORDER BY `a`.`serial` ASC', $clientId);
        }else{
          $conditions = ' `a`.`serial` = ' . $serial;
       }
    
       /**
        In your workflow you will most probably have a VARIABLE BAR that holds your request parameters which is what $conditions speaks to.
       */
        $conditions = array('conditions' => $conditions);
    
        $results = $workflow->getResults('orders', 'orders', $conditions);
    }catch(catch any exceptions thrown by the API here){
      //Log the exceptions here or do whatever
    }
    

    上面的列表应该是不言自明的。下面我将向您展示我在 FlowgearConnect 类中使用的功能。这不是标准方式,因为您可能会根据自己的需要配置不同的代码。

    //FlowgearConnect constructor
    class FlowgearConnect
    {
     protetced $endpoints = [];
    
      protected $domain = "https://your-domain.flowgear.io";
    
      public function __construct(array $endpoints)
      {
        $this->endpoints = $endpoints;
       }
    
      public function getResults($model, $workflow, $options= array())
      {
         $endpoint = $this->getEndpoint($model, $workflow);
    
         $results = array();
         if(!empty($endpoint)){
            $results = FlowgearInvoke::run($authOpts, $endpoint, $options, array('timeout' => 30)); 
          }
          return $results;
       }
    
       ....
    }
    

    如前所述,enpoints.php 文件仅从 flowgear 控制台中返回一组配置的端点和/或工作流名称。下面是我的样子的摘录:

    return array(
        'orders' => array(
             'shipped_orders' => '/shipped_orders',
             //etc
           ),
         'items' => array(
            'your_model' => '/workflow_name_from_flowgear_console',
           ),
      );
    

    这只是一个使用 PHP 的 Flowgear REST API 的基本选择查询。如果幸运的话,您应该按照为工作流程配置响应正文的方式获取记录。

    以下是工作流的典型测试以及您应该在 API 中返回的内容。

    我建议您首先在 flowgear 控制台上创建您的工作流程,并确保生成所需的输出并提取您想要更改的部分,而不是您的查询,将它们移动到变量栏以满足您的请求并注入它们在运行时根据您希望实现的目标。这种解释可以替代其他操作,例如更新和/或删除。最好的办法是先了解 flowgear,并确保在尝试创建一个安静的交互式应用程序之前,你可以在那里完成所有工作。

    注意:我使用这个平台已经一年多了,所以您可能会发现其中的错误,但我希望它会引导您找到解决问题的方法。如果没有,那么也许你可以创建一个 repo 并让我检查一下,看看你是如何配置一切的。

    【讨论】:

      猜你喜欢
      • 2015-06-30
      • 1970-01-01
      • 1970-01-01
      • 2022-09-28
      • 2017-08-18
      • 1970-01-01
      • 1970-01-01
      • 2018-01-22
      • 2011-03-03
      相关资源
      最近更新 更多