mcpField
E
encore-service

encore-service

github.com/encoredev开发30833 次安装2 天前更新
代码仓库

关于 encore-service

用于规划 Encore 应用中服务结构的技能,涵盖单服务、多服务及按系统组织的布局,也说明如何通过 Encore 客户端调用其他服务。

主要功能

  1. 01使用 encore.service.ts 定义服务
  2. 02组织单服务与多服务应用
  3. 03将相关服务归入系统
  4. 04通过 ~encore/clients 调用服务
  5. 05允许各服务拥有自己的数据库

适用场景

  1. 01创建新的 Encore 服务
  2. 02为扩展中的应用选择布局
  3. 03按系统组织电商服务
  4. 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