generated at
📝Requestの組み立てとResponseの解析を分離

Responseを変換する箇所を分離したい
現状の fetch を注入する形式だと、汎用性が低い
データを取得できなかったときに処理を中断する、などの操作ができない
ScrapBubbleの実装で困った
Requestの組み立てとResponseの解析を分離させる必要がある?

実装方法
今の実装と矛盾しない形にしたい
toRequest fromResponse のような函数を直接exportすることはできない
名前が重複する
上手いこと階層化する必要がある
各函数に、 Request を作る函数と Response からデータを取り出す函数を生やしてみる?
採用takker
イメージ.js
const req = getPage.makeRequest(project, title); const res = await fetch(req); const result = getPage.formatResponse(res);


2022-12-24
14:51:20 ScrapBubbleで必要になりそうなものだけとりあえず実装した
getPage
listPages
getProject
listProjects
2022-12-23
17:43:36 もっと簡単にできた
16:50:57 これで解決した
GetPage の無名関数のJSDocは deno doc で表示されない
getPage にJSDocをつけないと、 getPage 自体には何も説明が表示されない
GetPage と説明が重複してしまうけど、 getPage にも説明つけたほうがいいかも
ts
/** 指定したページのJSONデータを取得する * * @param project 取得したいページのproject名 * @param title 取得したいページのtitle 大文字小文字は問わない * @param options オプション */ export interface GetPage { /** /api/pages/:project/:title の要求を組み立てる * * @param project 取得したいページのproject名 * @param title 取得したいページのtitle 大文字小文字は問わない * @param options オプション * @return request */ toRequest: ( project: string, title: string, options?: GetPageOption, ) => Request; (project: string, title: string, options?: GetPageOption): Promise< Result< Page, NotFoundError | NotLoggedInError | NotMemberError > >; /** 帰ってきた応答からページのJSONデータを取得する * * @param res 応答 * @return ページのJSONデータ */ fromResponse: (res: Response) => Promise< Result< Page, NotFoundError | NotLoggedInError | NotMemberError > >; } const getPage_ = async ( project: string, title: string, options?: GetPageOption, ) => { const { fetch } = setDefaults(options ?? {}); const req = toRequest(project, title, options); const res = await fetch(req); return await fromResponse(res); }; getPage_.toRequest = toRequest; getPage_.fromResponse = fromResponse; export const getPage: GetPage = getPage_;
16:46:04 実装も型推論つきの型定義も問題ないのだが、 deno doc で追加した函数の型をうまく表示できない

#2022-12-24 14:43:56
#2022-12-23 17:43:40
#2022-10-07 11:59:06
#2022-07-26 06:33:03