用户接口

Flask-REST接口开发 + marshmallow

半世苍凉 提交于 2019-12-16 13:46:47
Flask-REST接口开发 + marshmallow REST是Representational State Transfer三个单词的缩写,由Roy Fielding于2000年论文中提出,它代表着分布式服务的架构风格。 后端负责数据编造,而前端则负责数据渲染,前端静态页面调用指定api获取到有固定格式的数据,再将数据展示出来,这样呈现给用户的就是一个”动态“的过程。 REST设计原则 1 客户端-服务器:通过将用户UI与数据存储分开,我们可以简化服务器组件来提高跨多个平台的用户界面的可移植性并提高可伸缩性。 它可以表现成前后端分离的思想。 2 无状态:从客户端到服务器的每个请求都必须包含理解请求所需的所有信息,并且不能利用服务器上任何存储的上下文。 这表示你应该尽可能的避免使用session,由客户端自己标识会话状态。(token) 3 规范接口:REST接口约束定义:资源识别; 请求动作; 响应信息; 它表示通过uri标出你要操作的资源,通过请求动作(http method)标识要执行的操作,通过返回的状态码来表示这次请求的执行结果。 4 可缓存: 缓存约束要求将对请求的响应中的数据隐式或显式标记为可缓存或不可缓存。如果响应是可缓存的,则客户端缓存有权重用该响应数据以用于以后的等效请求。 它表示get请求响应头中应该表示有是否可缓存的头(Cache-Control)

面试技巧篇01

拥有回忆 提交于 2019-12-16 12:36:37
1.问:你在 测试 中发现了一个 bug ,但是开发经理认为这不是一个 bug ,你应该怎样解决。   首先,将问题提交到 缺陷管理 库,类似禅道,进行备案,   根据需求文档,产品说明,设计文档等,确认实际结果是否与计划有不一致的地方,   如果没有文档,可以根据类似软件的一般特性来说明是否存在不一致的地方,来确认是否是缺陷;   根据一般用户的使用习惯,来确认   与设计人员、开发人员和客户代表等相关人员探讨,确认是否是缺陷;   合理的论述,向测试经理说明自己的判断的理由,注意客观、严谨,不参杂个人情绪   等待测试经理做出最终决定,如果仍然存在争议,可以通过公司政策所提供的渠道,向上级反映,并由上级做出决定。    2. 给你一个网站,你如何测试?   首先,查找需求说明、网站设计等相关文档,分析测试需求。   制定测试计划,确定测试范围和测试策略,一般包括以下几个部分:功能性测试;界面测试; 性能测试 ; 数据库 测试;安全性测试;兼容性测试   设计 测试用例 :   功能性测试可以包括,但不限于以下几个方面:   链接测试。链接是否正确跳转,是否存在空页面和无效页面,是否有不正确的出错信息返回。   提交功能的测试。   多媒体元素是否可以正确加载和显示。   多语言支持是否能够正确显示选择的语言等。   界面测试可以包括但不限于一下几个方面:   页面是否风格统一

Insight HandlerInterceptor 与@ExceptionHandler 的执行顺序

百般思念 提交于 2019-12-16 03:29:07
Insight HandlerInterceptor 与@ExceptionHandler 的执行顺序 问题起源:项目中HandlerInterceptor preHandle方法会把登录的用户信息存储在ThreadLocal,方便请求逻辑中获取, afterCompletion方法中会remove。当发生异常时,想通过@ExceptionHandler打印当前的用户名,还能拿到用户信息吗? 概念明确 HandlerInterceptor 请求拦截器,允许自定义处理程序执行链的工作流接口。afterCompletion方法,完成请求处理后回调,that is,渲染视图后回调。 ExceptionHandler 用于处理特定处理程序类或方法中的异常的注解,主要在Servlet环境中使用,根据异常的类型进行映射。涉及的类有:, ExceptionHandlerMethodResolver 扫描发现ExceptionHandler 注解的方法,并注册到mappedMethods ExceptionHandlerExceptionResolver 通过@ExceptionHandler方法解析异常,根据如下的UML得知,最终会以HandlerExceptionResolver接口的形式,在DispatcherServlet中调用。 源码 // mvc请求处理入口 protected

springboot+swagger企业开发实战(10年java老鸟经验)

孤街浪徒 提交于 2019-12-13 00:19:34
一句话概括:对于产品开发,特别是前后端分离的开发模式,接口文档是连接前后端的枢纽,本文对springboot+swagger在企业的实践进行详细描述。 1.引言 在软件开发过程中,接口设计与接口文档编写是重要的一环,特别是在前后端分离的情况下,接口说明文档是开发人员之间的连接点。接口文档的编写有很多方式,可以使用word,也可以使用编写工具如小幺鸡,这些基本属于脱离代码编写的文档,如果接口变化,需要额外修改文档,增加工作量。如何提高写接口文档效率,在springboot开发中,结合swagger来提供接口文档说明是一个很好的实践,通过配置与注解,在编写接口代码过程中,同时也把接口文档写好,接口需要变更时,文档也同时变更,具有工作量少,效率高,接口文档直观简洁,可实时调用验证等好处。本文基本springboot2+swagger2,结合在企业中的实践,对接口文档的编写进行详细说明,具体有如下内容: swagger介绍及文档生成说明 使用springboot2+swagger2构建示例工程及配置描述 使用注解添加文档内容说明 使用全局参数进行接口认证 如需看源码,本文示例工程地址: https://github.com/mianshenglee/my-example 2.swagger简介 2.1 swagger 介绍 swagger官网地址: https://swagger.io

事后诸葛亮分析报告

偶尔善良 提交于 2019-12-13 00:01:22
我们是这次稳了,成员分别有莫少政,温治乾,黄思扬,余泽端,江海灵 一、报告提纲 1.1,经验教训 1.2,目标和现状 1.3, 计划 1.4, 资源 1.5, 设计/实现 1.6, 测试/发布 二、会议内容 1.1、经验教训: 1. 首先需要与产品人员沟通需求,充分了解需求 2. 在了解需求的基础上,与前端开发人员制定初步的接口文档,再进行多轮讨论,制定具体的文档 3. 进行开发的过程,需要对系统有个整体的把握,做好系统架构 4,对于项目开发中接口文档相关知识知道的不够,接口文档对整个项目的开发进度、质量有着很大的影响,我认为今后我需要不仅仅是代码能力的提升,而且对于一个项目开发流程需要有更进一步的了解和学习,这样才能够更好的完成相应任务。 1.2、目标和现状: 项目目标:本次的团队项目「活动墙」为小程序 iGDUT 的一个子版块,学生会、团委、协会等各大学生组织和社团能够在活动墙上发布活动信息,用户可以快捷浏览、筛选活动信息。 项目价值:当前,社团举办活动的宣传和推广主要靠发传单和摆摊以及公众号推文朋友圈传播,难以触达大量用户;另一方面,很多想要参加活动的学生苦与无从获得活动信息。于是我们在两者之间搭建一道桥梁,在双方之间去做一个信息的聚合和分发,对接双方需求。如今是信息爆炸的时代,每天我们都浸泡在大量的信息之中,所以需要有一个渠道去整合信息,帮助人们筛选自己想要的信息。

Java Servlet

我是研究僧i 提交于 2019-12-12 21:08:15
Servlet : 在 Javaweb 中 非常的 重要, 在 整个 的 Javaweb 的知识体系中 都是 围绕 Servlet 来转的. (非常重要. 重点掌握.). ## Servlet : server applet * 概念: 运行在 服务端的 小程序. * Servlet 就是一个 接口, 定义了 Java 类 被 浏览器 访问到(被 tomcat 识别) 的 规则, * 将来 我们 自定义一个类, 实现 Servelet 接口, 复写方法. (tomcat 就可以识别 到, 浏览器 就可以访问到, 这个类 就 称为 Servelet ) 只要 我 这个 Java 类 实现了 Servlet 这个 接口(规则), 就可以 被 tomcat 识别. 动态资源: 每个 用户 访问 同一个 资源, 得到的 反馈 可能不一样, 怎么 不一样呢? 里面 加了 逻辑性的 代码, 例如: 判断 如果 是张三 这个 用户 访问, 回馈 什么信息, 如果是 李四 这个 用户 访问 , 回馈什么 什么信息, 这就造成了 每个 用户 访问的 资源 不一样. 而 这个 逻辑性的 代码 需要用 Java 代码 编写. 规则 一般在 Java 表示形式 为 接口, 在 tomcat 中 所能识别的 规则 就是 servelet. * 所以 我们 定义的 Java 类 要去 实现 servelet

Spring的两种动态代理:Jdk和Cglib 的区别和实现

早过忘川 提交于 2019-12-11 13:11:04
Spring的两种动态代理:Jdk和Cglib 的区别和实现 这是有意义的一天!自己研究一路畅通的感觉真爽 原理是参考大神的,代码手敲 一、原理区别: java动态代理是利用反射机制生成一个实现代理接口的匿名类,在调用具体方法前调用InvokeHandler来处理。 而cglib动态代理是利用asm开源包,对代理对象类的class文件加载进来,通过修改其字节码生成子类来处理。 1、如果目标对象实现了接口,默认情况下会采用JDK的动态代理实现AOP 2、如果目标对象实现了接口,可以强制使用CGLIB实现AOP 3、如果目标对象没有实现了接口,必须采用CGLIB库,spring会自动在JDK动态代理和CGLIB之间转换 如何强制使用CGLIB实现AOP? (1)添加CGLIB库,SPRING_HOME/cglib/*.jar (2)在spring配置文件中加入<aop:aspectj-autoproxy proxy-target-class="true"/> JDK动态代理和CGLIB字节码生成的区别? (1)JDK动态代理只能对实现了接口的类生成代理,而不能针对类 (2)CGLIB是针对类实现代理,主要是对指定的类生成一个子类,覆盖其中的方法 因为是继承,所以该类或方法最好不要声明成final 二、代码实现 用户管理接口 package com.lf.shejimoshi.proxy

「从模板消息改版订阅消息」小程序推送

拜拜、爱过 提交于 2019-12-11 09:07:36
前言 只有光头才能变强。 文本已收录至我的GitHub精选文章,欢迎Star : https://github.com/ZhongFuCheng3y/3y 如果近期有看我文章的同学,会知道我最近在公司做的是 推送系统 。推送系统在我这也叫做 消息管理平台 ,其实很容易理解:提供一个支持多渠道发送消息的系统。 在前段时间,微信公布: 小程序模板消息接口将于2020年1月10日下线,开发者可使用订阅消息功能 。 底层接口的变动,对程序员来说意味着什么,你懂的。 人在家中坐,班从天上来 本篇文章主要来聊聊我这边是怎么发送小程序消息的,以及改版后的简单介绍,希望对大家有帮助。 本文不涉及任何的高深知识,放心观看。 一、前置知识 发送小程序消息其实很简单,微信提供了 微信官方文档 供我们开发者去查阅相关的基础知识,提供HTTP接口给我们去方便调用: 对开发者来说,发送小程序消息总结来说就三步: 在微信后台创建模板 获取下发的权限 调用发送接口,发送消息 无论是以前的 模板消息 ,还是现在新的 订阅消息 ,步骤都是一样的。 二、模板消息和订阅消息的区别 为什么微信要把模板消息下线,要上线订阅消息呢?我们从发送小程序的步骤来看,只有“ 获取下发的权限 ”是可动的,其余的两步都是相同的。 我们开发者要 借助微信平台 向用户发消息,需要一个 理由 (下发的权限)。因为微信还是 注重用户体验 的。 2

MyBatis开发Dao的原始Dao开发和Mapper动态代理开发

痞子三分冷 提交于 2019-12-11 08:10:53
目录 咳咳...初学者看文字(Mapper接口开发四个规范)属实有点费劲,博主我就废了点劲做了如下图,方便理解: 原始Dao开发方式 1. 编写映射文件 3.编写Dao实现类 4.编写Dao测试 Mapper动态代理方式 1.定义Mapper.xml(映射文件) 2、编写UserMapper.xml配置文件内容: 3.编写UserMapper(接口文件) 4.加载UserMapper.xml文件 5.编写测试 @ 使用MyBatis开发Dao,通常有两个方法,即原始Dao开发方法和Mapper动态代理开发方法。原始Dao开发中存在以下问题: Dao方法体存在重复代码:通过SqlSessionFactory创建SqlSession,调用SqlSession的数据库操作方法 调用sqlSession的数据库操作方法需要指定statement的id,这里存在硬编码,不得于开发维护。 而动态代理开发中Mapper接口开发方法只需要程序员编写Mapper接口(相当于Dao接口),由 Mybatis框架根据接口定义创建接口的动态代理对象,代理对象的方法体同上边Dao接口实现类方法。 使用mapper代理的方法来开发dao时,程序员 只需要干两件事 即可: 1、 编写mapper.xml映射文件 2、 编写mapper接口(相当于dao接口) Mapper接口开发需要遵循以下 四个规范

接口幂等性的解决方案

落爺英雄遲暮 提交于 2019-12-11 07:50:30
在编程中,幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。幂等函数指的是那些使用相同参数重复执行也能获得相同结果的函数。这些函数不会影响系统状态,也不用担心重复执行会对系统造成改变。比如说getIdCard()函数和setTrue()函数就是幂等函数。 幂等在我的理解里就是,一个操作不论被执行多少次,产生的效果和返回的结果都是一样的。 一个幂等的操作典型如:把编号为5的记录的A字段设置为0这种操作不管执行多少次都是幂等的。 一个非幂等的操作典型如:把编号为5的记录的A字段增加1这种操作显然就不是幂等的。 幂等的方案 1.查询操作:Select是天然的幂等操作。 查询一次和查询多次,在数据不变的情况下,查询的结果都是一样的。 2.删除操作:删除操作也是幂等的,删除一次和删除多次都是把数据删除。 因为删除操作通常是定向的,比如通过id去删除数据,如果该id在数据库中存在对应记录,则删除该记录;如果该id在数据库中不存在对应记录,也是执行的删除记录操作,只是没有实质性地删除到记录而已,却也不会有其他的副作用。 但是如果删除操作具有返回值的话,可能返回的结果会不一样,比如删除一条记录之后返回这条记录中的某个值,如果删除的数据不存在(已经在第一次的删除请求中被删除了),返回的就是空值了。 3.唯一索引:通过在数据库表的一个字段上建立唯一索引可以有效防止新增脏数据。