.NET Core 3.1
运行时环境将整个系统分为4个子系统,每个子系统相对独立,且内部实现对外是透明的。控制层作为逻辑的控制中心,除了请求和响应的派发、转发,还需要进行错误处理、绝大部分的日志记录(利用Microsoft.Extensions.Logging进行),并保证整个系统不会陷入不可用状态。
这几乎是一个典型的MVC结构,但是有一些方面比较特殊:
Web API
就可以添加新的功能;软件系统与外界进行交互的主体。
主要获取用户输入并向后端发送请求、对后端提供的模型进行渲染并提供给用户、接收后端提供的服务并响应给用户。
这部分要求提供兼容移动端以及网页端的web。
账号管理页面
向用户提供包括账号注册,账号找回等账号维护功能。
机器人问答页面
向用户提供与机器人交互的主要页面。提供的功能包括回答用户提问,提示用户精确提问内容,引导用户将问题发送到提问去。
用户问答页面【Beta阶段会更新】
提出问题功能
回答问题功能
浏览问题其他一些与问答有关的交互(如点赞)的功能。
接收由前端(视图层)发来的请求,并进行安全控制,包括权限检查、错误处理等。
对筛选后的请求进行分发,将它们派发到服务层中的不同服务中去。同时也接收服务层产生的响应,并向前端进行转发。
网关
网关模块使用Nginx进行反向代理。这样做的好处包括:
控制器
从网关获取转发来的用户请求,对请求进行分析检查,对于有问题的请求进行报错。否则,在分析后将其指派给服务层中的不同服务;同时接收汇总服务层产生的响应并转发给网关,通过网关把响应交付给用户。
软件系统中负责处理用户请求的主要区域,包含主要的处理逻辑。
从控制层接收请求,对请求进行处理,并根据数据层提供的数据来对请求进行相应的反馈。
用户管理服务
用户管理服务对应前端的用户管理页面。处理用户有关维护账户信息的请求,包括:创建账户、找回账户、账户登录与退出、变更账户信息等。根据请求的不同情形做出不同的回应,并再向数据层请求更新数据库内容。
BOT服务
BOT服务对应前端的机器人问答页面,分析用户发来的聊天信息与提问信息并做出反馈。如果无法提供令人满意的回复,则会对问题进行包装转交给人工问答服务进行提问,并向用户反馈问题链接。
交互模块
执行模块
处理从交互模块传递来的较为复杂的问题,通过对问题的分析并综合从数据层获取的数据给出反馈。同样,该模块如果也认为不能给出满意答复,则会再人工问答服务中创建问题。
人工问答服务
人工问答服务对应于前端的用户问答页面。
人工问答服务提供的功能就与用户问答页面相对应,对于用户主动提出的问题、从BOT服务转发过来的经过包装的问题以及浏览问题信息、对问题做出解答,都由该服务负责处理。
同时也需做好与与数据层的沟通。
数据层负责维护数据库以及关联外部资源。
根据服务层任务的不同,数据层的工作包括:
数据库
储存所有内部数据。并提供典型的增删查改接口。
外部资源
所有可以关联到的外部数据的统称,主要是提供额外的补充信息。
具体设计见前后端接口说明书
为保证安全性,所有接口请使用https访问,将考虑禁用所有http访问。
权限分为三种:游客
、用户
、管理员
,权限等级依次提高,权限较高的用户可以进行全校较低的用户的操作。其中用户
以上的权限需要登录获得,在请求相关方式时,请求头中需包含Authorization
项,值为Bearer {token}
,其中token
为登录成功后服务器返回的RFC7519 - JWT令牌,使用参考JWT。描述中权限一栏描述为用户
时,管理员
即可访问,而用户
/管理员
一般表示该接口用户
有权以自己为目标调用,管理员
有权对所有人为目标调用,具体情况会有详细描述。
关于时间格式,参考自定义日期和时间格式字符串,一般值为yyyy/MM/dd-HH:mm:ss
,4位年份、2位月份、2位日期用/
隔开来表示日期,2位时(24小时制)、2位分、2位秒用:
隔开来表示时间,日期和时间用-
连接,所以位数不足时高位用0
补齐。
约定API描述中,用一对大括号{
、}
包裹的内容为当前位置参数的描述,特别地,{BASE_URL}
表示域名。被一对[
、]
包裹的内容标识可选的内容。
例如以下描述:
{BASE_URL}/api/question?qid={qid}
实际使用时,将转换为:
https://aiape.icu/api/question?qid=1024
索引(并且为了方便,将省略{BASE_URL}
):
URL | 类型 | 权限 | 功能简介 |
---|---|---|---|
/api/message |
POST |
游客 |
与机器人进行交互,具体接口参见Bot Framework REST API |
/api/user/signup |
POST |
游客 |
注册用户 |
/api/user/login |
POST |
游客 |
用户登录 |
/api/user/public_info |
GET |
游客 |
获取用户公开信息 |
/api/user/internal_info |
GET |
用户 |
获取用户内部信息 |
/api/user/fulll_info |
GET |
用户 /管理员 |
获取用户详细信息 |
/api/user/modify |
PUT |
用户 /管理员 |
修改用户信息 |
/api/user/questions |
GET |
用户 |
获取用户创建的所有问题 |
/api/user/answers |
GET |
用户 |
获取用户创建的所有回答 |
/api/user/fresh |
POST |
游客 |
刷新令牌 |
/api/questions/question |
GET |
游客 |
获取问题的详细信息 |
/api/questions/answer |
GET |
游客 |
获取回答的详细信息 |
/api/questions/tag |
GET |
游客 |
获取标签的详细信息 |
/api/questions/questionlist |
GET |
游客 |
获取问题列表 |
/api/questions/taglist |
GET |
游客 |
获取全部标签 |
/api/questions/add_question |
POST |
用户 |
添加问题 |
/api/questions/add_answer |
POST |
用户 |
添加回答 |
/api/questions/add_tag |
POST |
用户 |
添加标签 |
/api/questions/modify_question |
PUT |
用户 /管理员 |
修改问题 |
/api/questions/modify_answer |
PUT |
用户 /管理员 |
获取回答的详细信息 |
/api/questions/modify_tag |
PUT |
用户 /管理员 |
获取标签的详细信息 |
/api/questions/delete_question |
DELETE |
用户 /管理员 |
删除问题 |
/api/questions/delete_answer |
DELETE |
用户 /管理员 |
获取回答的详细信息 |
/api/questions/delete_tag |
DELETE |
用户 /管理员 |
获取标签的详细信息 |
在本阶段中:
Web API
的响应工作,其中/api/message
接口只需要完成简单的响应即可,可以进一步进行开发,但本阶段不做要求;后端所有公开方法需要进行单元测试:
较低压力
下,后端需要在服务器延迟
规定的时间内正确完成响应,网络良好的情况下,整个系统需要在显示延迟
规定的实现内完成响应并更新GUI;
中等压力
下,系统需要能够处理所有请求并正确地进行响应;
较高压力
下,系统可以不按正常情况进行响应,但是系统不能进入不可用状态,且需要向用户进行反馈;
以下为各个等级和要求的具体数值,由于首次进行开发,先制定较低的要求,后续将视情况提高要求:
key | value |
---|---|
较低压力 |
1 QPS |
中等压力 |
10 QPS |
较高压力 |
100 QPS |
服务器延迟 |
100 ms |
显示延迟 |
1000 ms |
邀请10~20人使用产品1-3天,反馈遇到的bug;
邀请不少于100人使用产品,并尽量收集使用反馈;
本阶段真实测试不关注当前机器人对话功能体验,主要关注页面设计、用户体验;本阶段真实测试的反馈阶段需进行收集用户期望获得的机器人体验,以便于下一轮开发;
使用说明书
,并可能配有视频讲解,以保证用户能够使用主要功能;后端API文档
,采用代码内XML注释+工具自动生成的方式产生,每一个公开的类、方法、属性须有响应的注释,每一个公开的方法、属性须说明可能引发的异常;原文:https://www.cnblogs.com/DQSJ2021/p/14794941.html