跳到主要内容

createRestHandlers()

function createRestHandlers(options?): HttpHandlers;

Defined in: packages/rxdb-adapter-http/src/rest.ts:395

用 REST 资源 URL 模板产出一整套 HttpHandlers(US-212 AC#27)。

Parameters​

ParameterTypeDescription
optionsRestHandlersOptions资源映射与逐操作的模板覆盖

Returns​

HttpHandlers

可直接交给 RxDBAdapterHttp 的 handler 集合

Remarks​

产出的 handler 与手写的完全等价:同样只做协议 mapping,不碰网络——发请求、注入 auth、提取 status、翻页、分块、单次发射仍全在适配器一侧。因此本模块拿不到、也不需要 改动阶段 A 的任何契约。

默认模板(方法 / 路径):

操作方法路径默认产出
fetchMetadataPOST:entity/metadata是(不可关)
findByIdsPOST:entity/by-ids是(不可关)
createPOST:entity是
updatePATCH:entity/:id是
deletePOST:entity/delete是
versionGET—否
isTableExistedHEAD—否

最后两行的路径栏是 — 而不是留空:这两个操作没有默认路径,不配 templates.version.path / templates.isTableExisted.path 就整个不产出 handler。 isTableExisted 的方法栏仍写 HEAD,那是给了路径之后才生效的默认方法 (不给默认路径的理由见 REST_OPERATIONS 里那一条的注释)。

请求体形状:fetchMetadata 发 { where, offset, limit, pageToken }(where 是 JSON RuleGroup,不是 SQL),findByIds 与 delete 发 { ids }, create / update 直接发调用方给的数据。

Example​

rxdb.adapter('http', db => new RxDBAdapterHttp(db, {
baseUrl: 'https://api.example.com/v1',
handlers: createRestHandlers({
resources: { Recipe: 'recipes' },
templates: `{ version: { path: 'meta/version' }, delete: null }`
})
}));
// fetchMetadata → POST https://api.example.com/v1/recipes/metadata
// update → PATCH https://api.example.com/v1/recipes/{id}
// delete → 不产出,repo.delete() 走 AC#4 的 fail-fast

Throws​

HttpConfigError 模板路径为空 / 含 ?、#、空白 / 方法非法 / 占位符集合不匹配 / 关闭了必选 handler / resources 的值不是合法路径片段