Initial commit: 网络验证平台
This commit is contained in:
@@ -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("动态代码文档更新成功")
|
||||
}
|
||||
Reference in New Issue
Block a user