Initial commit: 网络验证平台

This commit is contained in:
Admin
2026-04-27 17:22:56 +08:00
commit afe67d704e
780 changed files with 88960 additions and 0 deletions
+302
View File
@@ -0,0 +1,302 @@
package main
import (
"log"
"verification-platform-backend/internal/database"
"verification-platform-backend/internal/model"
)
func main() {
database.Init()
var doc model.Doc
if err := database.DB.Where("slug = ?", "api-get-dynamic-code").First(&doc).Error; err != nil {
log.Printf("未找到文档: %v", err)
return
}
newContent := `# 获取动态代码接口
**注意**:动态代码接口需要用户登录认证,需要在请求头中携带JWT token:
Authorization: Bearer {token}
### 接口地址
GET /api/v1/app/:appKey/dynamic-code
### 请求头
Authorization: Bearer {token}
### 路径参数
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| appKey | string | 是 | 应用密钥 |
### 响应示例
{
"code": 200,
"message": "操作成功",
"data": [
{
"id": 1,
"name": "加法函数",
"key": "add",
"description": "实现数字加法运算",
"status": "active",
"created_at": "2024-01-01T00:00:00Z"
}
]
}
### 字段说明
- id: 动态代码ID
- name: 动态代码名称
- key: 动态代码唯一标识
- description: 描述
- status: 状态(active、inactive
---
## 执行动态代码接口
### 接口地址
POST /api/v1/app/:appKey/dynamic-code/:key/execute
### 请求头
Authorization: Bearer {token}
Content-Type: application/json
### 路径参数
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| appKey | string | 是 | 应用密钥 |
| key | string | 是 | 动态代码标识 |
### 请求体
{
"params": {
"param1": "value1",
"param2": "value2"
}
}
### 参数说明
- params: 参数对象,键值对形式传递,键名即为JavaScript变量名
### 响应示例
{
"code": 200,
"message": "操作成功",
"data": {
"result": "执行结果",
"execution_time": 1
}
}
### 字段说明
- result: 代码执行结果
- execution_time: 执行时间(毫秒)
---
## JavaScript代码编写规范
### 1. 参数使用
动态代码可以直接使用请求参数中传递的变量,无需额外定义:
a + b
请求参数:{"params": {"a": 10, "b": 20}}
返回结果:30
### 2. 函数定义与调用
可以定义函数并在最后一行调用:
function calculate(x, y) {
return Math.sqrt(x * x + y * y);
}
calculate(x, y)
请求参数:{"params": {"x": 3, "y": 4}}
返回结果:5
### 3. 复杂逻辑
支持完整的JavaScript语法,包括控制流、循环、对象操作等:
function processScore(score) {
if (score >= 90) {
return "优秀";
} else if (score >= 60) {
return "及格";
} else {
return "不及格";
}
}
processScore(score)
### 4. 返回值规则
- **最后一个表达式的值即为返回值**
- **不要在全局作用域使用return语句**
- 可以返回任意类型:数字、字符串、布尔值、对象、数组等
### 5. 常见示例
#### 简单计算
price * quantity
#### 字符串拼接
name + "的年龄是" + age + "岁"
#### 条件判断
score >= 60 ? "及格" : "不及格"
#### 对象返回
{
sum: a + b,
product: a * b,
difference: a - b
}
#### 数组操作
function sumArray(numbers) {
let total = 0;
for (let i = 0; i < numbers.length; i++) {
total += numbers[i];
}
return total;
}
sumArray([1, 2, 3, 4, 5])
### 6. 注意事项
1. **全局作用域不能使用return**:return只能在函数内部使用
2. **参数变量直接使用**:无需重新定义
3. **最后一行是返回值**:确保最后一行是需要返回的表达式
4. **支持ES6语法**:可以使用let、const、箭头函数等
5. **内置对象可用**Math、Date、JSON等JavaScript内置对象都可以使用
---
## 错误处理
### 常见错误
#### 1. 语法错误
{
"code": 400,
"message": "代码执行错误: SyntaxError: Unexpected token"
}
#### 2. 运行时错误
{
"code": 400,
"message": "代码执行错误: ReferenceError: x is not defined"
}
#### 3. 全局return错误
{
"code": 400,
"message": "代码执行错误: SyntaxError: Illegal return statement"
}
---
## 完整示例
### 示例1:计算折扣价格
**请求**
POST /api/v1/app/your-app-key/dynamic-code/calculate-discount/execute
{
"params": {
"price": 100,
"discount": 20,
"tax": 10
}
}
**动态代码**
function calculateFinalPrice(price, discount, tax) {
const subtotal = price;
const discountAmount = subtotal * (discount / 100);
const afterDiscount = subtotal - discountAmount;
const taxAmount = afterDiscount * (tax / 100);
return afterDiscount + taxAmount;
}
calculateFinalPrice(price, discount, tax)
**响应**
{
"code": 200,
"message": "操作成功",
"data": {
"result": 88,
"execution_time": 1
}
}
### 示例2:用户信息格式化
**请求**
POST /api/v1/app/your-app-key/dynamic-code/format-user/execute
{
"params": {
"name": "张三",
"age": 25,
"city": "北京"
}
}
**动态代码**
function formatUserInfo(name, age, city) {
const greeting = "你好";
return greeting + ",我是" + name + ",今年" + age + "岁,来自" + city;
}
formatUserInfo(name, age, city)
**响应**
{
"code": 200,
"message": "操作成功",
"data": {
"result": "你好,我是张三,今年25岁,来自北京",
"execution_time": 1
}
}
---
## 性能建议
1. **避免死循环**:确保循环有明确的退出条件
2. **合理使用缓存**:对于重复计算,可以考虑缓存结果
3. **控制代码复杂度**:过复杂的代码可能影响执行效率
4. **使用内置函数**:优先使用JavaScript内置函数,性能更好
---
## 安全建议
1. **不要执行危险操作**:避免访问文件系统、网络请求等
2. **参数验证**:在代码中对参数进行必要的验证
3. **避免敏感信息**:不要在代码中硬编码密钥、密码等敏感信息
4. **限制执行时间**:设置合理的超时时间,防止长时间运行
`
doc.Content = newContent
if err := database.DB.Save(&doc).Error; err != nil {
log.Printf("更新文档失败: %v", err)
return
}
log.Println("动态代码文档更新成功")
}