跳转至

跨工具共享模板化位置

问题:https://github.com/morluto/rea/issues/4933

结果

一个会话通常编辑一个临时实体:它创建该实体,然后在固定路径(如 /api/v1/collections/0RZ576QZQA5KG)上更新和删除它。清单仅在相同方法的同级路由在该位置存在变化时才会对片段进行模板化,因此这些写入操作仍然是字面工具(patch_collections_0rz576qzqa5kg),即使同一集合的读取操作已被模板化为 /api/v1/collections/{collection_id}。字面写入工具针对的是在后续状态中可能不存在的单个实体,而且无法对其效果进行建模。

新的选择加入模板规则 prefix-variance 使用另一个工具在该位置已经使用的参数来模板化这样的字面量,因此写入操作变成 patch_collections_by_collection_id,与读取操作使用相同的模板。

要求

  • prefix-variance 仅在列出时生效,并且在所有其他选择加入规则之后应用,因此它可以共享这些规则产生的参数。
  • 当同一来源上的另一个工具(无论任何方法、任何段数)在相同的前面部分之后,于位置 p 处拥有一个来自其他选择加入规则之一的参数时,位置 p 上的字面量即被模板化。前面部分中的参数按命名它们的规则进行比较,因此由 prefix-variance 模板化的位置会与它共享的参数匹配。
  • 字面量在以下情况下符合条件:它是该参数在该位置观察到的值之一;或者它包含数字,并且其长度和字符类别(数字、小写字母、大写字母、其他字符)与其中一个值一致;或者该参数观察到的每个值(一个或多个)都具有至少八个字符的长度(正如生成的标识符通常那样),而字面量也具有该长度并且只使用这些值的字符类别,因此一个恰好不含数字的标识符仍然符合条件。空字面量、停用词或 v1 风格的版本永远不符合条件。每个参数的拼写只汇总一次,因此检查字面量时无需重新扫描其值;长度超过 128 个字符的值只按精确值比较,因此巨大的段不会产生分类开销。
  • 由四个格式规则模板化的位置永远不会被共享,因此 /api/teams/{numeric} 仍然不会吸收任何字面量。
  • 值保留在观察到它们的参数上:当不同规则的参数共享同一位置时,字面量共享观察到它的那个参数;否则共享拼写相似的最早参数。
  • 该参数采用它所共享参数的名称(collection_id、uid、成对参数的 _namespace 和 _name),并标记为 prefix-variance。
  • 路由现在按方法以及命名每个参数的规则相匹配的工具会合并。合并后的参数保留某个工具在自身模板化该位置时所用的规则(如果有这样的工具)。
  • 与同级规则一样,它最多比较 32 段的路由;当存在更长路由时,会在限制说明中注明。

非目标

  • 不更改默认规则或任何其他规则:未列出 prefix-variance 的清单逐字节保持不变。
  • 不根据响应体进行模板化,例如创建操作返回的 id;清单只读取请求行。
  • 不更改排除哪些组:响应没有正文或内容类型不在 /api/ 内的写入操作仍会作为 non-json 被排除。

本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 rea2/rea