当前位置:首页>java>CodeFree | 编程进入Prompt时代!Golang后端RESTful API高效开发实践

CodeFree | 编程进入Prompt时代!Golang后端RESTful API高效开发实践

  • 2026-10-21 13:28:37
CodeFree | 编程进入Prompt时代!Golang后端RESTful API高效开发实践

作为深耕软件开发多年的高级程序员,我亲历了从面向过程、面向对象到面向函数的编程范式演变,而CodeFree的出现,催生了全新的“面向提示词编程”模式。在Web应用后端开发中,大量工作集中在重复的CRUD(创建/Create、读取/Read、更新/Update、删除/Delete)操作上。即使需求各不相同,仍有很大比例的基础工作存在复用性,但这些工作并非简单复制粘贴,还需适配项目特有数据变化,导致重复劳动占用大量时间,成为开发效率瓶颈。

为破解这一痛点并释放更多时间聚焦核心业务,我引入CodeFree研发大模型探索智能化开发新路径,沉淀面向提示词编程的实践经验。提示词是一项工程,面向提示词编程需要经验积累。

经过超一年的实践应用,针对大模型编程总结出“控制一次性生成代码量、分步完成功能”的关键原则。本次实践以Web应用后端程序开发为核心,并依托CodeFree的智能体、规则配置、代码生成等核心能力稳步落地推进。

设计RBAC物理模型

以“资深后端架构师和数据库专家”为角色设定,向CodeFree智能体提交详细提示词。

角色设定:你是一位资深的后端架构师和数据库专家,专注于设计企业级权限管理系统,对PostgreSQL数据库有深入的了解。

一、设计目标与原则

请设计一个基于PostgreSQL的RBAC(基于角色的访问控制)认证系统的数据库物理模型。该系统需要满足以下核心需求:

RBAC核心概念实现:完整实现用户、角色、权限、用户角色关联、角色权限关联等核心实体关系;

多层级权限控制:支持权限的树状结构,实现权限的上下级继承关系;

细粒度权限管理:不仅控制功能操作权限,还要支持数据列级别的权限控制;

PostgreSQL特性利用:充分利用PostgreSQL的枚举类型、外键约束、索引优化等特性。

二、核心实体设计要求

1.用户表(users)

包含用户基本信息:用户ID、用户名、邮箱、密码哈希、状态等;

支持超级管理员标识(is_admin字段);

包含创建时间和更新时间戳

设计考虑:使用UUID作为主键还是自增整数?请说明选择理由。

2.角色表(roles)

角色基本信息:角色ID、角色名称、角色描述、状态;

支持角色层级关系:父角色ID字段,实现角色继承;

设计考虑:如何实现角色的树状结构?使用邻接表还是闭包表?

3.权限表(permissions)

权限资源定义:权限ID、权限名称、权限类型、权限路径/标识符;

权限树状结构:父权限ID,支持权限的层级关系;

权限类型区分:区分功能操作权限和数据权限;

设计考虑:如何存储权限的URL路径或API端点?

4.关联关系表

用户角色关联表(user_roles):建立用户与角色的多对多关系;

角色权限关联表(role_permissions):建立角色与权限的多对多关系;

设计考虑:是否需要组(group)概念?用户组与角色的区别和联系。

三、PostgreSQL特定实现要求

1.数据类型选择

使用PostgreSQL的枚举类型(ENUM)定义权限类型、状态等有限值字段。

示例:permission_type ENUM('admin', 'write', 'read') NOT NULL

使用合适的文本类型:VARCHAR、TEXT等;

时间戳字段使用TIMESTAMP WITH TIME ZONE。

2.约束与索引设计

主键约束:所有表都需要有主键;

外键约束:建立表间的引用完整性

唯一约束:用户名、邮箱等字段需要唯一性约束;

复合索引设计:针对常见查询模式优化。

用户权限查询:(user_id, entity_type, entity_id)

角色权限查询:(role_id, permission_id)

部分索引:对状态字段等创建部分索引提高查询效率

3.表结构示例要求

请为每个表提供完整的CREATE TABLE语句,包含字段名、数据类型、约束、字段注释(COMMENT)、索引定义、外键关系。

示例格式:

sqlCREATE TABLE users (    user_id UUID PRIMARY KEY DEFAULT gen_random_uuid(),    username VARCHAR(50) NOT NULL UNIQUE,    email VARCHAR(100) NOT NULL UNIQUE,    password_hash TEXT NOT NULL,    is_admin BOOLEAN DEFAULT FALSE,    status SMALLINT DEFAULT 1 CHECK (status IN (0, 1)), -- 0:禁用, 1:启用    created_at TIMESTAMPTZ DEFAULT NOW(),    updated_at TIMESTAMPTZ DEFAULT NOW());COMMENT ON TABLE users IS '用户信息表';COMMENT ON COLUMN users.is_admin IS '是否为超级管理员:true是,false否';

四、高级功能设计

1.权限继承机制

角色继承:子角色继承父角色的所有权限;

权限计算:用户最终权限 = 用户直接权限 + 角色权限 + 组权限;

设计考虑:如何高效计算用户的最终权限集合?

2.行级安全策略(RLS)

利用PostgreSQL的行级安全特性实现数据行级别的访问控制。

设计策略:基于用户角色限制数据访问范围。

示例:用户只能访问自己创建的数据,管理员可以访问所有数据

3.权限缓存机制

设计权限缓存表或视图,加速权限验证;

考虑Redis缓存集成方案;

缓存更新策略:权限变更时的缓存失效机制。

五、查询性能优化

1.常见查询模式

查询用户所有权限(包括通过角色继承);

检查用户对特定资源的访问权限;

获取用户菜单权限(用于前端动态菜单);

权限变更时的级联更新。

2.视图设计

创建用户权限视图,聚合用户的所有权限;

创建角色权限视图,展示角色的完整权限树;

设计考虑:使用物化视图还是普通视图?

3.函数与触发器

创建权限验证函数;

使用触发器维护数据的完整性和一致性;

示例:角色删除时自动清理关联关系。

六、安全考虑

1.数据保护

密码存储:使用bcrypt或argon2算法哈希存储;

敏感信息加密:对邮箱、手机号等敏感信息加密存储;

审计日志:记录所有权限变更操作。

2.SQL注入防护

使用参数化查询;

最小权限原则:应用连接使用最小必要权限的数据库用户。

3.防越权访问

后端API必须进行权限验证;

前端按钮和菜单根据权限动态显示;

数据访问时验证行级权限。

七、测试数据生成

生成10条随机用户数据,并赋予不同权限;

设计三层角色:普通用户、部门管理员、系统管理员。

八、输出格式要求

请提供完整的数据库设计文档,包含:

ER图描述:用文字描述各表之间的关系;

完整的SQL建表语句:包含所有表、索引、约束;

核心查询示例:

查询用户权限的SQL

权限验证的SQL

权限继承计算的SQL

输出目录:

docs/physical_model.md:包含物理模型和视图的结构和解释init/sql/physical_model.sql:包含所有表的建表语句和索引init/sql/views.sql:包含所有视图定义 init/sql/test_data.sql: 测试数据insert脚本

性能优化建议:针对高并发场景的优化策略;

扩展性考虑:如何支持未来可能的功能扩展。

特别强调:请充分利用PostgreSQL的特性,如枚举类型、JSONB字段、数组类型、全文搜索等,设计一个既符合RBAC标准又充分利用数据库优势的物理模型。

CodeFree智能体快速响应,生成了包含ER图描述、完整建表SQL、视图定义、测试数据脚本的数据库设计文档,完美覆盖提示词要求。

CodeFree智能体响应

(左右滑动查看更多)

生成Golang RESTful API完整代码

首先,需要在CodeFree中设置项目级规则,既能实现项目规则统一化,避免大模型思维混乱导致的代码冲突,也能减少每次提示词的冗余内容,让需求描述更聚焦核心功能。

在CodeFree中设置项目级规则

---

description: Golang RESTful API 智能体代码生成与检查

---

# rules

规则名称:Golang RESTful API 智能体代码生成与检查

触发条件: 当新建或修改 Golang RESTful API 相关文件(如 .go 文件)时

源码组织结构遵循以下规则:

dataaudit/├── cmd/                  # 应用入口│   └── server/│       └── main.go├── internal/│   ├── controller/      # 控制器层│   ├── dao/            # 数据访问层│   ├── cache/          # 数据缓存��│   ├── database/       # 数据库连接│   ├── errors/         # 错误处理│   ├── middleware/     # 中间件│   ├── model/          # 数据模型│   ├── response/       # 响应格式│   ├── router/         # 路由配置│   └── service/        # 业务逻辑层├── pkg/                # 公共库目录│   └── logger/         # 日志├── api/                # API定义目录│   └── openapi.yaml├── configs/            # 配置处理│   └── config.yaml├── deployments/        # docker编排文件│   └── Dockerfile│   └── compose.yaml├── scripts/            # 自动化编译发布的脚本│   └── build.sh├── go.mod              # 依赖管理└── README.md           # 项目说明

RESTful API设计原则

资源导向设计:遵循RESTful原则,将数据和功能映射为资源,使用URL作为资源的唯一标识符。

HTTP方法规范:

GET:用于查询资源

POST:用于创建新资源

PUT:用于更新资源

DELETE:用于删除资源

路由设计规范:

使用清晰、简洁的URL命名

例如:/users/{id}/orders 表示用户123的订单资源

遵循单一职责原则,每个API只服务于单一业务需求

自行使用的项目级规则

基于已完成的数据库物理模型,提交提示词(已设置项目级规则)。CodeFree自动读取数据库模型文件,生成Todo列表(创建项目结构、实现配置管理、数据库连接、中间件等),并按步骤编写代码。最终代码无需大幅修改即可编译成功,还支持单元测试与API文档生成。

角色设定:你是一位资深的Golang后端开发专家,专注于使用Golang框架构建高性能、可扩展的RESTful API服务。

任务要求:请根据以下要求,为我提供一个完整的Golang RESTful API实现方案:

一、框架选择与基础架构

项目初始化:提供完整的项目结构设计,包括路由层、控制器层、服务层和数据层的分离。

依赖管理:使用Go Modules进行依赖管理,确保版本兼容性。

框架:使用Gin框架,因为它是一个轻量级、高性能的Web框架,能够快速构建强大的Web应用程序。

数据库: postgresql

缓存: redis

ORM框架: gorm,对开发人员友好的 Golang ORM 库,全功能orm库

接口限流框架:go.uber.org/ratelimit

日志框架:go.uber.org/zap ,非常快的、结构化的,分日志级别的Go日志库

配置管理: github.com/spf13/viper 

接口文档:github.com/swaggo/gin-swagger  可以自动生成、展示和交互式地测试的 API 文档

二、具体实现要求

参考物理模型

物理模型已经完成设计,请以此物理模型为基础设计:

设计文档: 项目目录下docs/physical_model.md

物理模型创建sql: 项目目录下init/sql/physical_model.sql

视图创建sql: 项目目录下init/sql/views.sql

用户登录模块:

申请一次性登录密码(POST /sys/otp/{mobile_phone})

登录(POST /sys/login)

获取单个用户信息(GET /users/{id})

请求响应格式:

使用JSON作为数据交换格式

统一响应结构:包含状态码、消息和数据字段

示例响应结构:

json{  "code": 200,  "message": "success",  "data": {...}}

HTTP状态码使用:

200:请求成功

201:资源创建成功

400:错误请求

404:资源未找到

500:服务器内部错误

三、中间件与最佳实践

中间件配置:

配置管理: 使用yaml文件管理配置数据,使用viper读取配置,配置存在上下文context中;

请求日志记录:使用zap管理日志,可以通过上下文context中读取配置实现项目代码日志和中间件日志的分开配置日志级别,日志同时输出到console和文本文件中;

跨域处理(CORS)

身份验证与授权

请求限流:使用ratelimit对关键接口限流,比如登录接口,防止被爆破,配置的限流数据可以通过上下文context中读取;

缓存配置:使用redis存储一次性密码和登录后的token,以用户mobilephone为key存储用户信息。

参数验证:

对输入参数进行有效性验证

使用结构体验证标签(如binding:"required")

返回清晰的验证错误信息

错误处理:

统一的错误处理机制

定义枚举类型的错误代码

记录错误日志便于问题排查

四、部署

编译:

生成dockerfile,但不用立刻打包镜像;

分层编译设计,使用go:alpine为builder镜像,go:alpine为运行镜像。

编排:

使用docker compose 编排

使用caddy:2作为web代理镜像,反向代理给本项目镜像,本项目只监听docker网络接口

五、代码质量要求

代码结构清晰:遵循Go语言的最佳实践和代码规范;

错误处理完善:所有可能出错的地方都要有适当的错误处理;

并发安全:考虑并发访问的场景,确保线程安全;

性能优化:考虑内存使用、响应时间等性能指标。

六、测试要求

单元测试:为关键业务逻辑编写单元测试

集成测试:使用Gin Gonic等工具测试路由和处理函数

API文档:生成或编写清晰的API文档

输出格式要求:请提供完整的Go代码实现,包含详细的注释说明每个部分的功能和设计思路。代码应该可以直接运行或稍作配置即可使用。

CodeFree响应

(左右滑动查看更多)

开发效率实现6倍提升

传统模式下,完成包含RBAC权限管理的完整用户模块,需花费约24小时(设计数据库Schema 2小时、编写模型层代码3小时、实现业务逻辑6小时、编写API接口4小时、添加中间件3小时、编写API文档2小时、调试测试4小时);

使用CodeFree,仅需不到4小时即可完成同等质量的工作(编写清晰需求描述15分钟、与AI交互完善细节30分钟、审查微调代码2小时、运行测试调试1小时),大幅压缩基础工作耗时。

开发质量与规范性显著提升

生成的代码严格遵循项目Rules规范,目录结构清晰、命名统一,完全契合Golang最佳实践;数据库设计充分利用PostgreSQL特性,包含完整的约束、索引与高级功能,性能与安全性更有保障;API接口符合RESTful规范,统一响应格式与错误处理机制,减少后期维护成本。同时,CodeFree自动生成API文档与测试数据,降低了文档编写负担与测试难度。

欢迎参加

中国电信研发云

长期案例征集活动

案例模板下载链接

https://docs.srdcloud.cn/docs/473QyXx4w5U1Dr3w/

发送案例至邮箱

yanfayun@chinatelecom.cn

活动详情

欢迎关注转发“中国电信研发云”公众号

为您带来更多研发干货!↓↓↓
供稿 | 董德宝
辑 | 成莎莎 王凯雯 孙永健
校对 | 李银鑫
审核 | 龙显军 董智明

最新文章

随机文章