关于 encore-service
用于规划 Encore 应用中服务结构的技能,涵盖单服务、多服务及按系统组织的布局,也说明如何通过 Encore 客户端调用其他服务。
主要功能
- 01使用 encore.service.ts 定义服务
- 02组织单服务与多服务应用
- 03将相关服务归入系统
- 04通过 ~encore/clients 调用服务
- 05允许各服务拥有自己的数据库
适用场景
- 01创建新的 Encore 服务
- 02为扩展中的应用选择布局
- 03按系统组织电商服务
- 04在服务间进行类型化调用
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ encoredev/ skills --skill encore-service安装后在 Claude Code 中输入/encore-service确认已加载。
详细介绍
Encore 服务结构
说明
创建服务
每个 Encore 服务都需要一个 encore.service.ts 文件:
// encore.service.ts
import { Service } from "encore.dev/service";
export default new Service("my-service");
最简服务结构
my-service/
├── encore.service.ts # Service definition (required)
├── api.ts # API endpoints
└── db.ts # Database (if needed)
应用模式
单服务
可以在应用根目录定义服务:
my-app/
├── package.json
├── encore.app
├── encore.service.ts
├── api.ts
├── db.ts
└── migrations/
└── 001_initial.up.sql
多服务
每个服务都位于自己的目录中:
my-app/
├── encore.app
├── package.json
├── user/
│ ├── encore.service.ts
│ ├── api.ts
│ └── db.ts
├── order/
│ ├── encore.service.ts
│ ├── api.ts
│ └── db.ts
└── notification/
├── encore.service.ts
└── api.ts
大型应用(基于系统)
将相关服务归入系统:
my-app/
├── encore.app
├── commerce/
│ ├── order/
│ │ └── encore.service.ts
│ ├── cart/
│ │ └── encore.service.ts
│ └── payment/
│ └── encore.service.ts
├── identity/
│ ├── user/
│ │ └── encore.service.ts
│ └── auth/
│ └── encore.service.ts
└── comms/
├── email/
│ └── encore.service.ts
└── push/
└── encore.service.ts
服务间调用
从 ~encore/clients 导入其他服务:
import { user } from "~encore/clients";
export const getOrderWithUser = api(
{ method: "GET", path: "/orders/:id", expose: true },
async ({ id }): Promise<OrderWithUser> => {
const order = await getOrder(id);
const orderUser = await user.get({ id: order.userId });
return { ...order, user: orderUser };
}
);
指南
- 服务不能嵌套在其他服务中
- 使用
~encore/clients进行跨服务调用(切勿直接导入) - 每个服务都可以拥有自己的数据库
- 服务名称应使用小写且具有描述性
- 不要仅为整理代码而创建服务;请改用文件夹
- 尚未确定服务边界时,请使用
encore-architecture
评论
支持 Markdown