你在这里。看看这个问题与其他知识怎样相连。
选择节点前往页面 · 展开后可留在地图中阅读
一个问题
怎样把业务动作做成可发现的操作?
动作不仅需要执行函数,也需要参数、效果和失败的说明。
“标记为可审阅”包含哪些约定
假设报告有一个 mark-ready 动作。调用者需要知道它的入口、参数、状态变化和权限条件。处理函数只是其中一部分;列举与解释动作同样重要。
AFS provider 可以用动作描述与执行路由表达这类能力。读取动作说明、发现可用动作和执行动作是不同步骤。学习路径中的示意入口可以是 /work/.actions/mark-ready,但实际入口必须由 provider 的声明和挂载决定。
先明确效果,再接界面
| 问题 | 示例约定 |
|---|---|
| 输入是什么 | 报告标识与期望版本 |
| 改变什么 | 报告状态从draft变为ready |
| 谁可以执行 | 有该任务修改权限的调用者 |
| 再调用一次呢 | 由应用明确幂等或冲突规则 |
| 失败怎么返回 | 区分无权限、冲突和不存在 |
这些是教学用应用契约,不代表每个 provider 都已经实现。描述里的效果也不是授权本身;真正的执行边界必须实施规则。
从发现到执行的示意
以下是教学应用的交互记录,路径与输出需要由实际 provider 实现:
发现 /work 的动作
→ mark-ready,入口 /work/.actions/mark-ready
阅读动作说明
→ 输入 reportId、expectedVersion;效果:修改报告状态
执行前读取 /work/report
→ status=draft,version=7
exec /work/.actions/mark-ready {reportId:"report", expectedVersion:7}
→ status=ready,version=8
再次读取 /work/report
→ status=ready,version=8读取动作说明只提供信息,不应触发这个业务动作。expectedVersion 表示“只有报告仍然是我刚才读到的版本才修改”;如果别人已修改,执行方应按约定报告冲突。幂等指重复提交同一请求不会重复产生业务效果,但是否支持、如何识别同一请求,都要由应用明确规定。