# Test **Repository Path**: Hxiaoyang/test ## Basic Information - **Project Name**: Test - **Description**: 快来看 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-12-14 - **Last Updated**: 2022-11-24 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ##短信平台 二次开发流程 > 知乎:点击短信发送,肯定是先访问的知乎,然后通过代码转发到对应的短信平台 网页或者app ->企业 ->短信平台->运营商->最后到用户的手机, 用户点击完,等着 不需要把结果给浏览器或者app, ## 非实时的就可以做异步,企业告诉我们,然后可以用消息队列做异步,发送运营商。 ## 项目约定 >我们使用springcloud来做基础的骨架,通过分布式微服务的方式进行开发 ##需要的技术 1.eureka 注册中心 ##项目的组成 1.开发平台 >负责接受用户的请求,进行参数的基本过滤,进行灰度发布,我们可以认为是一个大型的网关 2. 接口服务 >负责处理用户的请求,对用户身份进行校验,数据格式校验等,向策略模块推送数据,并且负责返回结果给用户 3. 策略服务 > 负责处理短信的内容的策略,如黑名单,敏感词,限流,计费等 使用责任链设计模式进行开发,并且向后发送给短信网关 4. 短信网关 >负责接收策略服务放行的数据,和运营商进行通信,并将结果返回给接口服务,通知用户 5. 搜索服务 >接收策略和网关的日志,对短信的发送进行日志记录,供大数据进行分析,供客户查询 6. 管理平台 >负责数据的管理,比如黑名单的管理,敏感词的管理,限流,灰度发布,api网关映射,在线发送短信,查询结果,客户管理等等数据 7. 黑名单服务 >提供黑名单的管理,并以服务的方式供管理平台调用 8. 限流服务,灰度发布的服务,api网关的服务等等等 ## 约定优于编码 >在开发的时候先进行各种的约定,约定好了在开发可以减少开发过程中的冲突问题。 ### api网关 >为了项目的长期发展,减少因为功能需求带来的工作亮,我们期望有一个功能在不重启服务器的情况下对我们的接口进行一些管理, >比如我们可以直接关闭某个接口,可以对接口的参数进行统一的校验,还可以对一些接口进行幂等性检验等, >并且还可以帮助我们在增加新功能的同时不影响老功能的使用 并且我们期望通过一个地址进行访问。 ### 拦截对外的所有请求 >我们的网关是让用户访问的一个统一的入口,所以能够对外提供地址都要经过网关,所以我们要让网关拦截所有的对外请求,我们通过配置 >zuul,让所有请求都到达一个无用的服务....那么问题来了,谁来处理这些请求将请求转发到一个无用的服务,我们这么做的目的就是让 >请求都到网关,到网关后就一定会经过过滤器filter,我们在过滤器中可以手动转走(强制转发)。 ### 时间戳校验 >我们的网关是一个统一的入口,意味着用户的请求基本上都会走网关,那么我们就需要尽量保证网关是安全的,如果有人恶意抓包攻击怎么办? >用户传递的数据可能会包含一些敏感数据,如果用户的请求被人抓人拦截了,分析了数据后又放行了...所以我们给每个请求都设置有效期, >在有效期范围内,服务器可以处理请求,超过了就不处理,比如我们设置有效期为10秒,也就是请求的发送时间和服务器收到这个请求的时间间隔不超过10秒。 ### 签名 >上面对请求添加时间戳的要求,如果恶意攻击者修改了这个时间戳,就会导致我们的时间戳校验失败,所以我们应该有一种手段,如果参数被中途 >修改,我们可以检验出来-->散列值(MD5),对数据进行签名。我们发送的数据会按照我们一个预定的规则排序后生成签名,然后把签名放在参数中 >传递过去,签名的意义主要是防止请求被篡改,那么问题来了:签名的生成规则是什么? ### 幂等性操作 >如果这个请求被多次发送(刷新),导致出现的重复提交问题,对于查询来说,无论提交多少次,结果都是那些数据,查询天然幂等,但是对于 >增删改来说,我们的请求被多次发送就会出现问题,比如用户添加数据完成后,刷新,会导致服务器又执行了添加操作,导致数据库中多了一 >条数据,结果就会发生变化。幂等指的是多次操作的结果一致的,查询天然幂等,增删改非幂等 对请求进行幂等性的操作。 ### 参数校验 >我们的接口经常会要求用户必须传递什么参数,那我们的接口可能会很多,需要在每个controller中单独校验吗? 能不能通过网关进行 >一次性的代码校验,每个controller需要的参数可能不一样,怎么通过一个方法进行校验-->参数校验分为多种,一中是每个接口都需要 >传递的公共参数,另外就是每个接口根据业务单独需要的参数