CnGal新版网站架构与开放API功能概述
2021-08-19
15486次阅读
5人点赞
看板娘
Lv 9编辑者
哇,这里什么都没有呢
概述
- 本文将介绍CnGal资料站的代码架构和后端API的使用方法,建议开发人员和词条编辑者阅读本文
- 鉴于开发者的技术水平,目前无法将每一个 现实 情况制作成词条的对应字段和关联关系,如有补充请在正文部分添加说明
- 全部代码以 MIT 协议开源,仓库地址:https://github.com/CnGal/CnGalWebSite
- 本文更新可能有延迟,最新版本请参阅: API使用流程
代码框架
后端:ASP .Net Core Web API
前端:ASP .Net Core Blazor
UI库:Bootstrap Blazor、Masa Blaozr
词条
- 用户可以自由创建编辑词条
- 词条可以分为游戏,角色,staff,制作组四大类别,每一个词条都可以附加 标签 来进一步分类
- 词条分为六个版块(主要信息,附加信息,标签,主页,图片,关联信息)每个版块的状态相互独立
- 预览:用户已经编辑该版块,当前正在等待审核。可以重新编辑,之后会覆盖原审核请求
- 锁定:其他用户已经编辑该版块,当前正在等待审核,不可编辑(即使是管理员也不可)
- 正常:当前没有被编辑,可以编辑
- 用户创建词条后会按照板块分为最多六个 审核 请求等待处理。每个 审核 状态相互独立,可以单独通过或驳回
开发者请注意:编辑词条时不会修改版块状态,也就是说可能会有两个用户同时编辑一个版块,先提交的用户编辑会生效,后提交的用户会收到一个错误提示。如果你想要避免这个问题,请在用户进入编辑页面时,立即发送一个审核请求,此时版块会进入预览状态,之后用户的真实修改会覆盖审核请求,就像什么都没发生过一样。
- 完成编辑词条后发送一个审核请求,我们使用 审核请求 来实现词条编辑记录和用户编辑记录。当审核通过后会自动对用户发放相应的奖励
- 在词条中上传的图片会记录到用户的文件列表中,每个用户拥有500MB的空间存放文件
注意:在词条中删除图片并不会真实删除图片,只会消除图片引用
- 主页使用Markdown语法渲染,由于浏览器性能限制,强烈建议使用链接引用图片,而不是使用base64内嵌图片,我们很可能不会通过内嵌图片的审核
- 我们会在运行时动态解析关联词条,自动显示最新的主图和简介。因此会有一部分性能损失,特别是关联词条超过40时会有明显延迟(2-4 s)如果特别介意这些性能损失,可以在正文中嵌入链接
- 词条显示的角色、游戏、外部链接等关联信息,实际上同属于关联部分,没有分开储存
标签(分类)
- 有四个顶级标签:游戏、角色、STAFF、制作组
- 每个标签都有:父标签、子标签列表、关联词条列表
- 一般二级标签不包含关联词条,例如
游戏->按时长分->短篇
角色->按性格分->傲娇
角色->按身材分->萝莉
staff->按职位分->CV
- 修改标签的审核独立于词条审核
- 新建标签不会进行审核
文章
- 所以用户都可以发布文章:动态、访谈、攻略、感想、其他
- 动态类别的文章被词条关联后会按 真实发生时间 逆序显示在时间线中
- 管理员可以发布公告
- 文章不同于词条,只有发布它的用户和管理员才能编辑,其他和词条大致相同
用户
- 目前仅支持邮箱创建用户
- 登入界面需要进行人机验证,如无法加载人机验证请尝试玄学上网
- 旧版网站的历史用户在第一次登入后会将用户名与昵称合并,后续只能使用昵称或邮箱登入
- API接口使用JWT令牌验证身份
API概述
- API接口对外开放,欢迎适配:https://www.cngal.org/swagger/index.html
- 建议使用细分的API获取为对应页面处理过的简化数据
- 调用API时尽可能地带上身份信息
- 单个IP对单个API的请求按不同时段有上限次数,请不要滥用API接口
- 审核的BeforeData和AfterData字段是动态模型,需要根据审核类型动态匹配
- 词条的Information模型比较复杂,虽然可以在此基础上提供自定义信息,但是由于目前网站还未适配无法识别的数据编辑操作,将导致自定义数据在其他用户编辑后被删除,因此不建议使用自定义数据
如有疑问请咨询开发人员,我们会提供尽可能的帮助
最后编辑:2022年3月26日 21:58:26