proxy-backend-api-design

管理后台:/admin-api/{模块}/{实体}/{操作} 用户端: /app-api/{模块}/{实体}/{操作}

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "proxy-backend-api-design" with this command: npx skills add kevinqpeng/proxy-skills/kevinqpeng-proxy-skills-proxy-backend-api-design

API 设计规范

URL 约定

管理后台:/admin-api/{模块}/{实体}/{操作} 用户端: /app-api/{模块}/{实体}/{操作}

  • 实体名用 kebab-case(如 dict-type 、order-item )

  • 不使用复数形式

HTTP 方法映射

操作 方法 URL 说明

创建 POST

/create

@RequestBody

修改 PUT

/update

@RequestBody

删除 DELETE

/delete?id=1

@RequestParam

批量删除 DELETE

/delete-list?ids=1,2

@RequestParam

单条查询 GET

/get?id=1

@RequestParam

分页 GET

/page

Query String

列表 GET

/list / /list-all-simple

Query String

导出 GET

/export-excel

无 CommonResult

Controller 模板

@Tag(name = "管理后台 - {实体名}") @RestController @RequestMapping("/{模块}/{实体-kebab}") @Validated public class {Entity}Controller {

@Resource
private {Entity}Service {entity}Service;

@PostMapping("/create")
@Operation(summary = "创建{实体名}")
@PreAuthorize("@ss.hasPermission('{模块}:{实体}:create')")
public CommonResult<Long> create{Entity}(@Valid @RequestBody {Entity}SaveReqVO createReqVO) {
    return success({entity}Service.create{Entity}(createReqVO));
}

@PutMapping("/update")
@Operation(summary = "修改{实体名}")
@PreAuthorize("@ss.hasPermission('{模块}:{实体}:update')")
public CommonResult<Boolean> update{Entity}(@Valid @RequestBody {Entity}SaveReqVO updateReqVO) {
    {entity}Service.update{Entity}(updateReqVO);
    return success(true);
}

@DeleteMapping("/delete")
@Operation(summary = "删除{实体名}")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('{模块}:{实体}:delete')")
public CommonResult<Boolean> delete{Entity}(@RequestParam("id") Long id) {
    {entity}Service.delete{Entity}(id);
    return success(true);
}

@GetMapping("/get")
@Operation(summary = "获得{实体名}详情")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('{模块}:{实体}:query')")
public CommonResult<{Entity}RespVO> get{Entity}(@RequestParam("id") Long id) {
    return success(BeanUtils.toBean({entity}Service.get{Entity}(id), {Entity}RespVO.class));
}

@GetMapping("/page")
@Operation(summary = "获得{实体名}分页")
@PreAuthorize("@ss.hasPermission('{模块}:{实体}:query')")
public CommonResult<PageResult<{Entity}RespVO>> get{Entity}Page(@Valid {Entity}PageReqVO pageReqVO) {
    return success(BeanUtils.toBean({entity}Service.get{Entity}Page(pageReqVO), {Entity}RespVO.class));
}

}

VO 设计

VO 类型 后缀 用途

分页请求 PageReqVO

继承 PageParam ,分页查询入参

保存请求 SaveReqVO

创建+更新共用(id 更新时必传)

响应 RespVO

详情/列表/分页返回

精简响应 SimpleRespVO

下拉选项等轻量返回

VO 规则

  • 创建和更新共用 SaveReqVO

  • 必填字段用 @NotNull /@NotBlank

  • message
  • 所有字段必须有 @Schema 注解

  • 入参必须 @Valid 校验

  • 禁止 Controller 直接接收 DO

  • DO -> VO 用 BeanUtils.toBean()

响应格式

{ "code": 0, "msg": "", "data": { ... } }

分页:{ "code": 0, "data": { "total": 100, "list": [...] } }

Swagger 注解

  • Controller: @Tag(name = "管理后台 - xxx")

  • 方法: @Operation(summary = "xxx")

  • 参数: @Parameter(name, description, required, example)

  • VO 字段: @Schema(description, requiredMode, example)

  • description 用中文,必填标注 REQUIRED ,提供 example

错误码

// 格式:1-{模块编号}-{实体编号}-{序号} ErrorCode {ENTITY}_NOT_EXISTS = new ErrorCode(1_0XX_0YY_000, "当前{实体}不存在");

权限码格式

{模块}:{实体}:{操作} (create/update/delete/query/export)

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

General

proxy-backend-database

No summary provided by upstream source.

Repository SourceNeeds Review
General

proxy-backend-global

No summary provided by upstream source.

Repository SourceNeeds Review
Automation

proxy-backend-impl-workflow

No summary provided by upstream source.

Repository SourceNeeds Review