api - 规则引擎(无状态引擎)的 REST URI

标签 api rest uri stateless

我需要一些为规则引擎设计 REST URI 的指导。定义了一组规则并以XML文件的形式存储在后端系统中。这些规则被分为不同的类别,并且根据用户指定的类别执行一组规则。用户将一组用户选择/选项和类别作为输入传递到规则引擎。规则引擎针对用户选择/选项执行属于该类别的规则。这些是类似流程/计算的操作,不涉及将用户状态持久保存到系统中。总的来说,用户状态不是在规则引擎中维护的……即无状态规则引擎。

我正在尝试设计用于规则引擎执行的 REST API(规则创建部分已经处理完毕):

  1. 该操作不会创建、更新、删除任何服务器端资源。
  2. 规则根据用户选择执行。
  3. 用户选择可能很复杂(层次结构),并且无法建模为 URI 参数。

请您指导我们考虑上述方面来设计 REST URI 模式。

要获取属于某个类别的规则:

GET /rule_category/{id}

在规则上下文中处理用户选择(由规则引擎执行规则):

POST /rule_engine
BODY to contain a JSON structure with rule category & user selections

请就上述 URI 设计以及上述用例的任何其他可能的 URI 提供您的建议。规则执行 URI 是否应该使用 PUT/POST?

编辑 1:添加封装规则类别和用户选择信息的示例 JSON/XML 结构:

{
    processdata:{
        rulecategory:'ruleCat1',
        userselections:{
            userselection:[
                {
                    item:'us1'
                },
                {
                    item:'us2'
                },
                {
                    item:'us3',
                    customselection:{
                        value:'cs1'
                    }
                }
            ]
        }
    }
}

<ProcessData RuleCategory="ruleCat1">
<UserSelections>
    <UserSelection Item="us1"/>
    <UserSelection Item="us2"/>
    <UserSelection Item="us3">
        <CustomSelection Value="cs1"/>
    </UserSelection>
</UserSelections>

最佳答案

REST 不是远程过程调用 (RPC)。 REST 是关于资源的。

如果您想要一个处理计算的 RESTful API,请将计算建模为资源。

创建新的计算资源

请求

POST /computations
Content-Type: application/json

{
  // the selected rules etc.
}

回应

201 Created
Location: /computations/748A9FC0-B74E-11E4-8822-4D7FDD9DA696

其中748A9FC0-B74E-11E4-8822-4D7FDD9DA696是服务器生成的此计算的ID。

获取计算状态

请求

GET /computations/748A9FC0-B74E-11E4-8822-4D7FDD9DA696

响应:仍在计算

200 OK
Content-Type: application/json

{
  "id": "748A9FC0-B74E-11E4-8822-4D7FDD9DA696",
  "data": { ... },
  "state": "computing"
}

回应:完成

200 OK
Content-Type: application/json

{
  "id": "748A9FC0-B74E-11E4-8822-4D7FDD9DA696",
  "data": { ... },
  "state": "finished",
  "result": {
    // details about the result
  }
}

关于api - 规则引擎(无状态引擎)的 REST URI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28578816/

相关文章:

bash - 如何从一行中进行grep

php - 使用 Twitter 的 REST API 检索速率限制状态

java - 无法解析 URI 的方法 'resolve'

ruby - 使用 Mechanize 重定向到错误的 URI 会引发无效的 URI 错误

php - 在 PHP 中查找两个字符串的匹配部分

python - 如何在 python 中将 quandl Api key 添加到我的请求中

Android - API 级别 21 中的日期

java - 从 javascript 将对象传递给 Rest

javascript - Rx.js 和应用程序工作流程

java - Angularjs Java Rest服务415不支持的媒体类型