路由(C# 里 ASP.NET 的 MapGet / MapPost / Map / MapGroup 那一层,够 Agui.Server 用的大小):路由表 ⇒ 一个 Ring 处理器。
为什么不用 reitit:它对「字面量段 vs 参数段」的冲突要么装配期报错、要么退成按登记顺序的线性匹配,而 C# 的契约是按具体度选
(宿主后登记的 agent/mine/stop/:id 要胜过先登记的 agent/:id/stop/:id),还要「路径中、方法不中 ⇒ 405 + Allow,
兜底段(任何方法)在时 ⇒ 不是 405」。这一百来行比把 reitit 的冲突解析与缺省处理器拧成这个样子更直接。
一条路 = [方法 模式 处理器]:
方法 :any | "GET" | #{"GET" "HEAD"}(大写)
模式 "/agent/:id/run":字面量段、:名 参数段(匹配一段,值已解码)、末尾 *名 兜底段(匹配零或多段,值是余下的
路径,段间以 / 连接)。字面量段大小写不敏感(ASP.NET 同);末尾的 / 不计("/a/" 与 "/a" 是同一条)。
处理器 Ring 处理器 (fn [req] 响应),req 带 :path-params。返回 nil ⇒ 200 空正文(ASP.NET 同:处理器什么都没写)。
选路(ASP.NET 的口径):路径匹配的那些里挑最具体的 —— 逐段比,字面量 < 参数 < 兜底,同等时先登记的胜;方法不中的跳过。
路径中了而方法一条都不中 ⇒ 405 + Allow;路径都不中 ⇒ 404(正文为空)。
产出的处理器两种元数都有(Ring 异步的 3 元:respond / raise 在同一线程上调)。
路由(C# 里 ASP.NET 的 MapGet / MapPost / Map / MapGroup 那一层,够 Agui.Server 用的大小):路由表 ⇒ 一个 **Ring 处理器**。
为什么不用 reitit:它对「字面量段 vs 参数段」的冲突要么装配期报错、要么退成按登记顺序的线性匹配,而 C# 的契约是**按具体度**选
(宿主后登记的 `agent/mine/stop/:id` 要胜过先登记的 `agent/:id/stop/:id`),还要「路径中、方法不中 ⇒ 405 + Allow,
兜底段(任何方法)在时 ⇒ 不是 405」。这一百来行比把 reitit 的冲突解析与缺省处理器拧成这个样子更直接。
一条路 = `[方法 模式 处理器]`:
方法 :any | "GET" | #{"GET" "HEAD"}(大写)
模式 "/agent/:id/run":字面量段、`:名` 参数段(匹配一段,值已解码)、末尾 `*名` 兜底段(匹配零或多段,值是余下的
路径,段间以 / 连接)。字面量段大小写不敏感(ASP.NET 同);末尾的 / 不计("/a/" 与 "/a" 是同一条)。
处理器 Ring 处理器 (fn [req] 响应),req 带 :path-params。返回 nil ⇒ 200 空正文(ASP.NET 同:处理器什么都没写)。
选路(ASP.NET 的口径):路径匹配的那些里挑**最具体**的 —— 逐段比,字面量 < 参数 < 兜底,同等时先登记的胜;方法不中的跳过。
路径中了而方法一条都不中 ⇒ 405 + `Allow`;路径都不中 ⇒ 404(正文为空)。
产出的处理器两种元数都有(Ring 异步的 3 元:respond / raise 在同一线程上调)。(compile-pattern pattern)模式串 ⇒ 段描述的向量。兜底段只能在最后。
模式串 ⇒ 段描述的向量。兜底段只能在最后。
(group prefix routes)给一组路加前缀(C# MapGroup)。保留 routes 的元数据。
给一组路加前缀(C# MapGroup)。保留 `routes` 的元数据。
(route methods pattern handler)造一条路(也可以直接写 [方法 模式 处理器] 向量)。
造一条路(也可以直接写 `[方法 模式 处理器]` 向量)。
(select routes method path-segs)对 (方法, 解码后的段) 选路 ⇒ [:ok 路 参数] / [:method-not-allowed 允许的方法集] / [:not-found]。
对 (方法, 解码后的段) 选路 ⇒ `[:ok 路 参数]` / `[:method-not-allowed 允许的方法集]` / `[:not-found]`。
cljdoc builds & hosts documentation for Clojure/Script libraries
| Ctrl+k | Jump to recent docs |
| ← | Move to previous article |
| → | Move to next article |
| Ctrl+/ | Jump to the search field |