CnGal新版网站架构与开放API功能概述

CnGal新版网站架构与开放API功能概述

2021-08-19 14690次阅读 5人点赞

概述

  • 本文将介绍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

留言板

发生未知错误

请尝试刷新页面,如果问题无法解决,可加 QQ群 761794704 进行反馈