前言:
小面学弟:小面,我刚学完springboot,我想写接口,在企业里面,到底是咋样的一个步骤啊?都要写一点什么?
小面:嗯,这个问题问的好,我们在开发要考虑接口文档的编写,入参的验证,业务的正确与完整......
小面学弟:小面,那你给我讲讲呗~
小面:那涉及的内容有很多啊~ 我就讲一下接口文档,get、post的选择,入参的验证和全局异常处理吧~
正文:
我们写一个接口,首先就得提供好一个完整的接口文档,通常我们会使用swagger。举个例子,我们会用到以下注解:
@Api(tags = "A部分接口") //这个注解我们会用在类上 @ApiOperation("接口1") @ApiImplicitParams({ @ApiImplicitParam(name=参数1 ,value=参数1) })
get还是post的选择:我们要考虑我们的接口是进行了什么操作,一般查询我们会使用Get请求,其他的操作会使用Post请求。如果你对接口的安全性有要求,那么建议使用post,因为get的参数会携带在url上。这里对get和post有疑问的小伙伴可以去查一下get和post 的区别。
入参的验证:对于一些特定的接口,我们对于入参是需要验证的,虽然是前端大多数情况下会进行一些验证,但是我们后端也是要做的。因为后端是不能相信任何端的输入的。
//一般情况下,我们都会在接口的实现层,写业务之前都会去判断一下参数 if(StringUtils.isEmpty(参数1)){ throw new XXException("enum.code","enum.msg") } //我们也会根据业务的不同,不一定是判断非空,比如说判断一个手机号或者身份证是否格式正确,我们就要用正则去判断。 //上方enum 就是我们自己去定义的错误码枚举类。通常包含module,code,msg,args。我们也要做统一的异常处理类,因为这个XXException是我们自己定义的异常类 //所以我们通常要写一个GlobalExceptionHandler //同时,我们接口的返回也是要定义好格式和枚举类的 return R 或者 AjaxResult //这个R和AjaxResult,就是我们通常定义的返回类,里面包含了code,msg,data
这里给大家分享一下全局异常的写法。BaseException就是我们自己定义的类。
@RestControllerAdvice public class GlobalExceptionHandler { private static final Logger log = LoggerFactory.getLogger(GlobalExceptionHandler.class); @ExceptionHandler(BaseException.class) public AjaxResult baseException(BaseException e,HttpServletRequest request) { String requestURI = request.getRequestURI(); log.error("请求地址'{}',参数为:'{}',发生异常为:'{}',异常码为:'{}'", requestURI, e.getArgs(),e.getDefaultMessage(),e.getCode()); AjaxResult ajaxResult = new AjaxResult(Integer.parseInt(e.getCode()),e.getDefaultMessage()); return ajaxResult; } @ExceptionHandler(RuntimeException.class) public AjaxResult handleRuntimeException(RuntimeException e, HttpServletRequest request) { String requestURI = request.getRequestURI(); log.error("请求地址'{}',发生未知异常.", requestURI, e); return AjaxResult.error(e.getMessage()); } /** * 系统异常 */ @ExceptionHandler(Exception.class) public AjaxResult handleException(Exception e, HttpServletRequest request) { String requestURI = request.getRequestURI(); log.error("请求地址'{}',发生系统异常.", requestURI, e); return AjaxResult.error(e.getMessage()); } }
一个简单的接口就基本上是完成了,有一个接口文档,入参验证,再完成你的业务,最后返回给你的前端。但是,对于一个完善的接口还有很多需要考虑到,比如接口防重放,接口限流,接口的高并发高可用....还有很多需要考虑的
总结:
这就是简单的需要考量的几点写接口的需求。