内容控制器 (Contents) 处理所有与项目(实验、模型、讨论)相关的操作,包括发布、查询、点赞、评论等。
获取基本服务信息。
请求
GET /Contents/
响应
{
"Message": "Success",
"Data": {
"$type": "<>f__AnonymousType3`3[[System.String, System.Private.CoreLib],[System.String, System.Private.CoreLib],[System.Int64, System.Private.CoreLib]], Quantum API",
"Region": "US",
"Domain": "Physics",
"Timestamp": 1640995200
},
"Status": 200
}提交实验。
请求
POST /Contents/SubmitExperiment
Content-Type: application/json
{
"Summary": {
"ID": "experiment_id",
"Title": "实验标题",
"Description": "实验描述",
"Category": "Experiment",
"Tags": ["标签1", "标签2"]
},
"Experiment": { /* 实验数据 */ },
"Workspace": { /* 工作区数据 */ },
"Localization": "本地化数据",
"Request": {
"FileSize": 1024000
}
}
参数
Summary(object, required): 项目摘要(ExperimentSummary),包含Title、Description、Category、Tags等。Experiment/Workspace(object, conditional): 视Startup.Domain决定,物理域为Experiment对象,NetLogo 可能使用Workspace。Localization(string, optional): 本地化信息。Request(object, optional): 上传请求,包含FileSize等;若提供,接口会返回上传令牌。- 校验:新提交且为
Model类别时,非Junior用户可能被限制;Summary的内容会做停用词检查。
确认项目图像更新。
请求
POST /Contents/ConfirmExperiment
Content-Type: application/json
{
"SummaryID": "summary_id",
"Category": "Experiment",
"Image": 1,
"Extension": "jpg"
}
参数
SummaryID(string, required): 摘要 ID(24 字符)。Category(string, required): 类别。Image(int, required): 图片版本号;若随请求上传文件,则服务器会替换为新版本。Extension(string, optional): 文件扩展名(当文件随请求提交时)。
移除项目。
请求
POST /Contents/RemoveExperiment
Content-Type: application/json
{
"SummaryID": "summary_id",
"Category": "Experiment",
"Hiding": false
}
参数
SummaryID: 字符串,摘要 IDCategory: 字符串,类别Hiding: 布尔值,是否隐藏
恢复项目。
请求
POST /Contents/RestoreExperiment
Content-Type: application/json
{
"SummaryID": "summary_id",
"Category": "Experiment"
}
参数
SummaryID: 字符串,摘要 IDCategory: 字符串,类别
精选/取消精选项目。
请求
POST /Contents/SelectExperiment
Content-Type: application/json
{
"SummaryID": "summary_id",
"Category": "Experiment"
}
参数
SummaryID: 字符串,摘要 IDCategory: 字符串,类别
为项目添加标签。
请求
POST /Contents/AcknowledgeExperiment
Content-Type: application/json
{
"SummaryID": "summary_id",
"Category": "Experiment",
"Tag": "精选"
}
参数
SummaryID: 字符串,摘要 IDCategory: 字符串,类别Tag: 字符串,标签
移动项目到其他类别。
请求
POST /Contents/MoveCategory
Content-Type: application/json
{
"SummaryID": "summary_id",
"Category": "Experiment",
"Target": "Model"
}
参数
SummaryID: 字符串,摘要 IDCategory: 字符串,当前类别Target: 字符串,目标类别
获取库内容。
请求
POST /Contents/GetLibrary
Content-Type: application/json
{
"Identifier": "library_id",
"Language": "Chinese"
}
参数
Identifier: 字符串,库标识符Language: 字符串,语言
查询项目列表。
请求
POST /Contents/QueryExperiments
Content-Type: application/json
{
"Query": {
"Category": "Experiment",
"UserID": "user_id",
"Tags": ["标签"],
"Skip": 0,
"Take": 20,
"Sort": "Popularity",
"Languages": ["Chinese"]
}
}
参数
Query: 对象,查询参数,包含以下字段:Category(string, 可选,默认 "Experiment"): 实体类别,常见值 "Experiment"、"Model"、"Discussion" 等。若为 "Model",部分字段(如Languages) 可能不必提供。Languages(string[], 条件必需): 语言数组;当UserID为null且Category!= "Model" 时必须提供。示例: ["Chinese"]。ExcludeLanguages(string[], 可选): 排除的语言数组。Tags(string[], 可选): 标签数组;当UserID为null时最多允许 2 个标签,用于按标签过滤。ModelTags(string[], 可选): 专用于模型的标签数组。ExcludeTags(string[], 可选): 要排除的标签数组。ModelID(string, 可选): 模型 ID,24 字符的 ObjectId。ParentID(string, 可选): 父项目 ID,24 字符。UserID(string, 可选): 用户 ID;特殊值 "Mine" 表示当前用户,"Favorite" 表示收藏;若不为空且不是空字符串,长度必须为 24。Special(string, 可选): 特殊查询类型;当前支持"Star"、"Support"等(视 API 实现)。From(string, 可选): 游标分页用 ID(24 字符)。Skip(int, 可选): 跳过数量(>=0)。Take(int, 可选): 返回条数,最大 30(服务端会校验),若未提供服务端通常采用默认值(例如 20)。Days(int, 可选): 按最近 N 天过滤。Sort(enum|string, 可选): 排序方式,支持:Default(0)、Popularity(1)、Historical(2)、Special(3)、Random(4)。可传字符串或对应数字。ShowAnnouncement(bool, 可选): 是否包含公告类内容。ShowOffline(bool, 可选): 是否包含离线内容(通常内部使用)。
- 验证规则:
- 当
UserID == null时,若Category != "Model"则Languages不可为空;Tags最多 2 个。 UserID非空且非空字符串时长度必须为 24。From必须为 24 字符 ID(若提供)。Take不得大于 30(服务端校验)。
- 当
- 示例:
{
"Query": {
"Category": "Experiment",
"Languages": ["Chinese"],
"Tags": ["热学","动能"],
"Skip": 0,
"Take": 20,
"Sort": "Popularity"
}
}
获取项目摘要。
请求
POST /Contents/GetSummary
Content-Type: application/json
{
"ContentID": "content_id",
"Category": "Experiment"
}
参数
SummaryID(string, required): 内容/摘要 ID(24 字符)。Category(string, required): 类别。WithSummary/Language/Skip/Take:用于控制返回的扩展信息与分页。
获取项目衍生内容。
请求
POST /Contents/GetDerivatives
Content-Type: application/json
{
"ContentID": "content_id",
"Category": "Experiment",
"WithSummary": true,
"Language": "Chinese"
}
参数
ContentID(string, required): 内容/摘要 ID(24 字符)。Category(string, required): 类别。WithSummary/Language/Skip/Take:用于控制返回的扩展信息与分页。
获取项目支持者。
请求
POST /Contents/GetSupporters
Content-Type: application/json
{
"ContentID": "content_id",
"Category": "Experiment",
"Skip": 0,
"Take": 10
}
参数
ContentID: 字符串,内容 IDCategory: 字符串,类别Skip: 整数,跳过数量Take: 整数,返回数量
获取用户资料。
请求
POST /Contents/GetProfile
Content-Type: application/json
{
"ID": "user_id"
}
参数
ID: 字符串,用户 ID
记录项目访问。
请求
POST /Contents/VisitExperiment
Content-Type: application/json
{
"SummaryID": "summary_id",
"Category": "Experiment"
}
参数
SummaryID: 字符串,摘要 IDCategory: 字符串,类别
获取实验保存数据。
请求
POST /Contents/GetExperiment
Content-Type: application/json
{
"ContentID": "content_id"
}
参数
ContentID: 字符串,内容 ID
获取工作区保存数据。
请求
POST /Contents/GetWorkspace
Content-Type: application/json
{
"ContentID": "content_id"
}
参数
ContentID: 字符串,内容 ID
检查项目是否已星标(已废弃)。
请求
POST /Contents/IsStarred
Content-Type: application/json
{
"ContentID": "content_id",
"Category": "Experiment"
}
参数
ContentID: 字符串,内容 IDCategory: 字符串,类别
星标/取消星标项目。
请求
POST /Contents/StarContent
Content-Type: application/json
{
"ContentID": "content_id",
"Category": "Experiment",
"Status": true,
"Type": "Star"
}
参数
ContentID: 字符串,内容 IDCategory: 字符串,类别Status: 布尔值,星标状态Type: 字符串,星标类型("Star" 或 "Support")
邀请协作者。
请求
POST /Contents/InviteCoauthor
Content-Type: application/json
{
"Category": "Experiment",
"SummaryID": "summary_id",
"TargetID": "target_user_id"
}
参数
Category: 字符串,类别SummaryID: 字符串,摘要 IDTargetID: 字符串,目标用户 ID
移除协作者。
请求
POST /Contents/RemoveCoauthor
Content-Type: application/json
{
"Category": "Experiment",
"SummaryID": "summary_id",
"TargetID": "target_user_id"
}
参数
Category: 字符串,类别SummaryID: 字符串,摘要 IDTargetID: 字符串,目标用户 ID