LoopBack 4 核心术语完全指南:从 Action 到 Repository 的系统化架构词汇表

发布时间:2026/10/14 8:17:24
LoopBack 4 核心术语完全指南:从 Action 到 Repository 的系统化架构词汇表
后端微服务【免费下载链接】loopback-nextLoopBack makes it easy to build modern API applications that require complex integrations.项目地址https://gitcode.com/gh_mirrors/lo/loopback-next点击查看免费下载本篇指南围绕 LoopBack 4loopback-next官方术语表展开系统梳理 Action、API specification、Application、Component、Connector、Context、Controller、DataSource、Element、Mixin、Model、Sequence、Service、Repository 这 14 个贯穿框架的核心概念。文中每个术语不仅给出精确定义还结合当前仓库中loopback/core、loopback/context、loopback/rest、loopback/repository等包的源码实现进行印证。读完本文你将能够在一次完整请求从「进入 Sequence」到「由 Repository 读写数据」的链路中准确说出每一步背后对应的概念与代码位置。一、术语表在 LoopBack 4 中的定位LoopBack 4 的官方术语表Glossary位于 docs/site/Glossary.md它用极简的一句话定义勾勒出框架的核心抽象层。这些术语并不是彼此孤立的词汇而是构成了一条完整的数据处理链路Action动作组成 Sequence序列Sequence 通过 Controller控制器处理请求Controller 调用 Repository仓库Repository 依托 DataSource数据源与 Connector连接器访问外部系统而这一切都运行在 Application应用与 Context上下文构成的容器环境里。理解术语表就等于拿到了阅读全部 LoopBack 4 文档与源码的地图。二、ActionSequence 中可组合的原子操作Action只接受或返回 Element 的 JavaScript 函数。由于一个 Action 的输入一个 Element恰好是另一个 Action 的输出Element它们可以轻易地被组合起来。Action 是 LoopBack 4 请求处理的最小逻辑单元其核心设计是无状态、输入输出均为 Element。这种「管道式」设计让开发者可以像拼接积木一样重组请求处理流程而不必修改框架内部逻辑。从源码看请求处理链路中的典型 Action 都被抽象为独立类型并注入到 Sequence 中见 packages/rest/src/types.ts 与 packages/rest/src/sequence.ts。DefaultSequence的构造函数通过inject(SequenceActions.FIND_ROUTE)、inject(SequenceActions.PARSE_PARAMS)、inject(SequenceActions.INVOKE_METHOD)等装饰器依次注入findRoute路由查找、parseParams参数解析、invoke方法调用、send响应发送、reject错误处理五个动作——这正是 Action「可注入、可替换」特性的直接体现constructor( inject(SequenceActions.FIND_ROUTE) protected findRoute: FindRoute, inject(SequenceActions.PARSE_PARAMS) protected parseParams: ParseParams, inject(SequenceActions.INVOKE_METHOD) protected invoke: InvokeMethod, inject(SequenceActions.SEND) public send: Send, inject(SequenceActions.REJECT) public reject: Reject, ) {}如需自定义处理流程开发者可以编写自己的SequenceFunction或实现SequenceHandler接口再通过app.bind(CoreBindings.SEQUENCE).toClass(MySequence)覆盖默认实现源码注释示例见 sequence.ts。三、API specification描述 REST API 的 OpenAPI 文档API specification一份描述 REST API 的 OpenAPI 文档YAML 或 JSON 格式。它指定了客户端发出合法请求所需的元数据HTTP 动词、路径、请求头等。在 LoopBack 4 中API 规范不是事后手写的文档而是从 Controller 的装饰器元数据中自动生成的。loopback/openapi-v3包提供了getControllerSpec见 packages/openapi-v3/src/controller-spec.ts以及get、post等操作装饰器见 operation.decorator.ts。开发者只需用装饰器标注路由、参数与响应运行时即可导出完整的 OpenAPI 规范用于 API Explorer、SDK 生成或客户端联调。规范中的 verbs、paths、headers 等元数据正是「客户端发起合法请求所需」的信息集合。四、Application一切组件的容器Application组件的容器。在源码层面Application是 LoopBack 4 的顶级抽象它继承自Context并实现LifeCycleObserver见 packages/core/src/application.ts因此既拥有依赖注入容器的能力也具备生命周期管理能力。RestApplication进一步在 packages/rest/src/rest.application.ts 中扩展出 REST 服务器、路由表与 OpenAPI 能力。典型用法如下import {RestApplication} from loopback/rest; const app new RestApplication(); app.controller(MyController); // 挂载控制器 app.component(MyComponent); // 挂载组件 await app.start(); // 启动并监听端口Controller 类型ControllerClass在 application.ts 中定义为ConstructorT任何可被new的类都可以作为控制器注册。五、Component可复用的绑定、控制器与服务包ComponentBindings、Controllers、Services、Repositories 与 models 的可复用捆绑包。更多信息参见 Using components 与 Creating components。Component 的价值在于按组贡献资源一个组件可以一次性向应用注册多个控制器、Provider、服务、服务器、生命周期观察者与普通绑定。Component接口定义在 packages/core/src/component.ts其字段结构如下controllers控制器类数组providers以key: ProviderClass形式映射的 Provider 类classes以key: Class形式映射的普通类例如rest.body-parsers.xml: XmlBodyParserservers服务器类映射lifeCycleObservers生命周期观察者类数组services服务或 Provider 类数组bindings预构建好的Binding数组components嵌套的其他组件类。框架内置的RestComponent见 packages/rest/src/rest.component.ts就是把 REST 服务器、序列、中间件、OpenAPI 服务等以组件形式装配进应用的典型例子。六、Connector抽象底层后端系统的接口Connector抽象底层后端系统例如数据库、Web 服务等的接口。Connector是loopback/repository中定义的核心接口见 packages/repository/src/connectors/connector.ts它屏蔽了不同后端MySQL、PostgreSQL、MongoDB、Cloudant、REST 服务等的差异为上层提供统一的能力面name连接器名称/类型configModel配置模型interfaces连接器实现的能力列表如ConnectorInterfaces.StrongRelation中的强关系接口、StrongJoins中的强连接接口connect()/disconnect()建立与断开底层连接ping()探测底层系统连通性execute()执行命令并返回结果。仓库中的连接器实现示例包括 acceptance/repository-mongodb、acceptance/repository-postgresql、acceptance/repository-mysql 等验收测试工程它们分别演示了如何通过连接器驱动真实数据库。七、Context请求与响应对象的封装Context对请求和响应对象的封装为编写 Web 应用与 API 提供有用的值。更多信息参见 Context。在 LoopBack 4 中Context 不仅封装 HTTP 请求/响应更是一个逐请求的依赖注入容器。基类Context继承自 Node.js 的EventEmitter见 packages/context/src/context.ts支持按层级Application → Server → Request组织 Binding实现值解析、标签过滤、上下文视图ContextView等能力。REST 层的RequestContext见 packages/rest/src/request-context.ts在Context之上加入request与response属性成为每个 HTTP 请求独有的「临时 IoC 容器」Sequence 中通过context.request/context.response即可访问原始报文。八、ControllerAPI 端点的实现ControllerAPI 端点的实现。Controller 是开发者最常编写的类每个公开方法对应一个 API 操作。方法通过get、post、put、del等装饰器绑定到 HTTP 动词与路径装饰器定义见 packages/openapi-v3/src/decorators/operation.decorator.ts参数通过param、requestBody等装饰器声明来源与校验规则。ControllerClass类型定义于 packages/core/src/application.ts。控制器只关心「接收参数、调用领域逻辑、返回结果」路由匹配与请求解析则交由框架完成——这正是「实现 API 端点」与「暴露 HTTP 细节」的职责分离。九、DataSource连接器的命名配置DataSource对 Connector 实例的命名配置表示外部系统中的数据。更多信息参见 DataSource。DataSource 将「连接哪个后端、如何连接」固化为一份可复用的命名配置。DataSource接口定义在 packages/repository/src/datasource.ts包含三个核心字段name数据源名称connector底层连接器实例settings连接器相关配置连接串、认证信息、连接池参数等。同一类型的 Connector 可以通过不同的 DataSource 配置连接到不同环境开发库、测试库、生产库Repository 只依赖 DataSource 的抽象从而隔离了环境差异。框架还提供SchemaMigrationOptions见 datasource.ts支持existingSchema: drop | alter两种模式驱动数据库迁移并可通过models限定迁移范围。十、ElementSequence 的构建块ElementSequence 的构建块例如 route、params 与 result。更多信息参见 Sequence。Element 是 Action 之间流转的「数据单元」。在默认序列中findRoute产出 route路由parseParams以 route 为输入产出 args参数invoke消费 args 产出 result结果send再消费 result 写入响应——前一个 Action 的输出恰好是后一个 Action 的输入。这一「Element 管道」模型在 DefaultSequence.handle 中完整呈现const route this.findRoute(request); const args await this.parseParams(request, route); const result await this.invoke(route, args); this.send(response, result);十一、Mixin为模型与类注入能力的接口Mixin模型的接口。在 TypeScript 中Mixin 是一种通过类继承组合复用能力的模式定义一个函数接收基类并返回扩展后的子类。loopback/core提供了专门的MixinTarget类型见 packages/core/src/mixin-target.ts来绕开 TypeScript 对混入类访问保护成员的限制其官方示例为export function MyMixinT extends MixinTargetApplication(superClass: T) { return class extends superClass { // 贡献新的类成员 }; }在loopback/repository中mixins/目录如 packages/repository/src/mixins即为模型/仓库提供混入能力在loopback/rest的测试中也有find-by-title-controller-mixin.ts见 packages/rest/src/find-by-title-controller-mixin.ts演示通过 Mixin 为控制器注入通用查询逻辑。可以推断Mixin 在 LoopBack 4 中不止作用于 Model而是普遍用于为 Application、Controller 等类扩展能力。十二、Model应用数据及其关系的定义Model定义应用数据以及数据如何与其他数据关联。loopback/repository以领域驱动设计DDD的构建块为蓝本实现 Model 体系见 packages/repository/src/model.ts。PropertyDefinition描述单个属性type、id、hidden、jsonSchema、itemType等ModelSettings描述模型级行为description、forceId、hiddenProperties、scope、strict等RelationDefinitionMap描述模型间关系BelongsTo、HasMany、HasOne、ReferencesMany 等见 packages/repository/src/relations。示例model() export class Todo extends Entity { property({id: true, generated: true}) id: number; property({type: string, required: true}) title: string; }十三、Sequence请求响应的无状态编排Sequence控制 Application 如何响应请求的一组无状态动作。Sequence 是 LoopBack 4 最核心的扩展点之一其实现集中在 packages/rest/src/sequence.ts。框架内置两种序列DefaultSequencesequence.ts按「执行中间件 → 查找路由 → 解析参数 → 调用方法 → 发送响应/捕获错误」的顺序串起五大注入动作MiddlewareSequencesequence.ts基于中间件链的序列通过RestMiddlewareGroups定义有序分组sendResponse→cors→openApiSpec→findRoute→authentication→parseParams→invokeMethod并使用validate校验分组顺序invokeMethod之后不得再挂中间件组否则报错。由于 Sequence 是「无状态」的每个请求都会基于自己的RequestContext运行一次序列因此并发请求之间互不干扰开发者也可以完全替换序列来定制请求处理管线如加入审计、限流等逻辑。十四、Service外部系统实现的操作Service在外部系统中实现的操作。Service 代表那些不由应用本地实现、而是委托给外部系统的业务操作例如调用 SOAP Web 服务、REST 第三方 API 或遗留系统。loopback/core提供service装饰器与ServiceInterface类型见 packages/core/src/service.ts由于 TypeScript 的interface在运行时没有反射服务接口可以用字符串、Symbol 或函数来标识。仓库中的典型落地包括服务代理包 packages/service-proxy通过serviceProxy装饰器将远程 API 绑定为可注入服务示例工程 examples/soap-calculator 演示调用 SOAP 计算器服务。十五、Repository表示数据集合的服务Repository一种表示 DataSource 内数据集合的 Service 类型。更多信息参见 Repositories。Repository 是对数据访问的封装它「是 Service 的一种」但专门对应某个 DataSource 中的某类数据集合。loopback/repository定义了层次分明的仓库接口体系见 packages/repository/src/repositories/repository.tsRepositoryT所有仓库的基接口ExecutableRepositoryT支持execute()执行原始命令CrudRepositoryT提供create、createAll、find、updateAll、deleteAll、count等通用 CRUD不要求 IDEntityCrudRepositoryT, ID基于实体与 ID 的 CRUDTransactionalRepositoryT支持beginTransaction()开启事务TransactionalEntityRepositoryT, ID组合事务与 CRUD。具体实现类DefaultCrudRepository与DefaultTransactionalRepository位于 packages/repository/src/repositories/legacy-juggler-bridge.ts另有面向键值存储的KeyValueRepository与DefaultKeyValueRepository见 packages/repository/src/repositories/kv.repository.ts。Controller 只依赖 Repository 接口不关心底层是哪种数据库从而保持领域层与基础设施解耦。十六、术语协作一次完整请求的完整旅程将上述概念串起来一次 REST 请求在 LoopBack 4 中的旅程如下请求到达RestServer框架为它创建RequestContext封装 request / responseDefaultSequence或MiddlewareSequence启动依次执行注入的 ActionfindRoute在RoutingTable中匹配出 routeparseParams按 OpenAPI 规范从请求中解析出参数invoke调用目标 Controller 的方法方法内部注入 RepositoryRepository 通过 DataSource 持有的 Connector 访问外部数据库/服务结果沿原路径返回send将结果写入 HTTP 响应任一步出错则由reject捕获并统一处理错误。在这个链路中Application 提供容器Component 提供资源包Context 提供隔离环境Sequence 提供编排Controller 提供端点Repository/DataSource/Connector 提供数据访问Model 定义数据结构Service 封装外部操作——14 个术语各司其职共同构成 LoopBack 4 的完整架构。十七、延伸阅读各术语的完整文档Context、DataSource、Controller、Repository、Sequence、Component、Creating components概念总览Concepts 与 Crafting-LoopBack-4核心源码loopback/core、loopback/context、loopback/rest、loopback/repository赞分享后端微服务【免费下载链接】loopback-nextLoopBack makes it easy to build modern API applications that require complex integrations.项目地址https://gitcode.com/gh_mirrors/lo/loopback-next点击查看免费下载相关推荐Apache Beam 核心术语完全指南从 Pipeline 到 Splittable DoFn 的入门必备词汇表Apache Beam 核心术语完全指南从 Pipeline 到 Splittable DoFn 的入门必备词汇表 本文以 Apache Beam 官方学习项批处理流处理大数据Bazel 构建系统核心术语指南掌握从 Action、Skyframe 到 Workspace 的完整概念体系Bazel 构建系统核心术语指南掌握从 Action、Skyframe 到 Workspace 的完整概念体系 Bazel 是一个快速、可扩展、支持多语言与多构建工具AISystem 术语表Glossary精读AI 系统全栈核心词汇速查与索引指南AISystem 术语表Glossary精读AI 系统全栈核心词汇速查与索引指南 导读本文基于开源课程 AISystemAI 系统附录中的 术语表文档教程人工智能上一篇oh-my-openagent 文档-代码一致性审计705 条声明中检出并修复 178 处文档漂移的完整实践下一篇使用 Docker 与 Docker Compose 部署 Hister 自托管搜索引擎创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考