hono
Webフレームワーク
https://github.com/honojs/hono
https://jsr.io/@hono/hono
https://hono.dev/
https://zenn.dev/yusukebe/articles/a00721f8b3b92e
server側のコードを書くと、client側のREST API wrapperを作れる
code:exaple.ts
import { Hono } from "jsr:@hono/hono@4";
import type { BasePage, Page } from "jsr:@cosense/types@0.10/rest";
import { hc } from "jsr:@hono/hono@4/client";
const pages = new Hono()
.get(
"/:project",
(ctx) =>
ctx.json({
projectName: ctx.req.param("project"),
skip: parseInt(ctx.req.query("skip") ?? "0"),
limit: parseInt(ctx.req.query("limit") ?? "100"),
count: 23434,
pages: [] as BasePage[],
}),
)
.get(
"/:project/:title",
(ctx) => ctx.json({ title: ctx.req.param("title") } as unknown as Page),
);
const route = new Hono().route("/api/pages", pages);
const client = hc<typeof route>("");
const res = await client.api.pages":project".$get({
param: { project: "takker" },
});
const list = await res.json();
for (const pages of list.pages) {
const res = await client.api.pages":project"":title".$get({
param: { project: "takker", title: pages.title },
});
console.log((await res.json()).lines.map((line) => line.text).join("\n"));
}
Responseに型をつけたClientResponse<T, U, F>を使っている
https://jsr.io/@hono/hono/4.6.5/src/client/types.ts#L70
これはReact.ChangeEvent<T = Element>の戦略と同じ
scrapbox-userscript-stdも📝Requestの組み立てとResponseの解析を分離するのではなく、型付けしたResponseを返せばよかったかな
#2024-10-17 17:18:42