# README.md

> 注：2023-2024 年的考核由 golang 方向进行考核试点

文档最后更新日期：2024 年 7 月 28 日

## 设计说明

> 我们编写这份 doc，是为了避免你陷入不必要且毫无个人成长的细枝末节泥潭中

这份接口文档被设计于 west2-online 的下半年综合考核，我们期望下半年的考核具备如下特性

1. 不重复编写CURD接口
2. 尽可能的对考核文档明晰
3. 更侧重于架构、实现、数据库性能、容器
4. 以单一项目贯穿全程，后续考核在项目基础上进行添加，修缮和重构

在下半年中，你会始终和这份接口文档相伴，而你也不需要继续编写额外的接口（除非接口文档有更新）


## 详细解释

这份文档编写的较为详细，给出了接口的具体定义和一些要求，在接口说明中已经做了一些铺垫，这里主要是做一些详细解释

### 唯一标识符（ID）

我们在接口中要求涉及到ID 的，**JSON 必须是 string 类型**，但是我们不对ID 内容做具体要求

即，你的 ID 可以是以下形式或其他形式，但只要保证输出时带引号即可

| 10000 | 483675103821824000 | b9bd0ef6-d628-4821-bd86-936c35ec3055 |
| --- | --- | --- |

### 功能完整性

我们不要求你必须首先把功能全部实现，但要完成作业文本的最基础内容

以互动部分的评论为例，你可以先实现基础的评论功能，后续再添加子评论功能

### 数据库设计

考虑到性能优化，你需要对数据库的设计有一定的功底，项目的数据库结构设计会作为后续考察的一个重点之一

但是你**完全不需要**一开始就尝试设计出一个性能非常优秀的结构，这是不需要的，你可以先完成一个**最简单的表**

然后开始逐步引入外键、索引、分区和事件等等

文档上会注明下一次答辩前需要做到的最低优化要求

### 架构与中间件

我们鼓励初学者按照自己能力的提升逐步完善这个项目，以下是一个可能的情景

- 一开始最好以**单体式**实现这个项目的接口服务

- 你进行了一定的学习，你应当对性能有一定的理解，即使用**缓存、异步或其他方式**提升你的接口能力

- 你发现你项目的设计模式有问题，你或许需要进行重构

- 你发现你项目的一些**逻辑存在问题/不够好**，你或许需要更新你的逻辑

- 你发现你应当考虑你项目的架构，你或许需要将单体式修改为**分布式**

- 你需要考虑你项目的部署难度以及自动化程度，即你的开发效率

- 你发现你可以上一些中间件辅助项目，你开始为你的项目添加中间件


以上内容不分先后，以作业文档为最低要求，唯一不变的是你一直在做的都是这个项目

我们希望你一开始写的项目是一坨答辩，而最后在你自己不断的学习（和作业最低要求的 push）下将这个项目的复杂度、可维护性做的越来越好
