我需要一些为规则引擎设计 REST URI 的指导。定义了一组规则并以XML文件的形式存储在后端系统中。这些规则被分为不同的类别,并且根据用户指定的类别执行一组规则。用户将一组用户选择/选项和类别作为输入传递到规则引擎。规则引擎针对用户选择/选项执行属于该类别的规则。这些是类似流程/计算的操作,不涉及将用户状态持久保存到系统中。总的来说,用户状态不是在规则引擎中维护的……即无状态规则引擎。
我正在尝试设计用于规则引擎执行的 REST API(规则创建部分已经处理完毕):
- 该操作不会创建、更新、删除任何服务器端资源。
- 规则根据用户选择执行。
- 用户选择可能很复杂(层次结构),并且无法建模为 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/