写一个接口该注意什么?

简介: 写一个接口该注意什么?

前言:

小面学弟:小面,我刚学完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());
    }
}

一个简单的接口就基本上是完成了,有一个接口文档,入参验证,再完成你的业务,最后返回给你的前端。但是,对于一个完善的接口还有很多需要考虑到,比如接口防重放,接口限流,接口的高并发高可用....还有很多需要考虑的

总结:

这就是简单的需要考量的几点写接口的需求。

相关文章
|
存储 监控 前端开发
linux 自带的监控系统 Cockpit 系统监控
linux 自带的监控系统 Cockpit 系统监控
316 0
|
NoSQL 关系型数据库 MySQL
分布式锁(redis/mysql)
分布式锁(redis/mysql)
413 1
|
存储 Prometheus Cloud Native
「译文」Grafana Loki 简要指南:关于标签您需要了解的一切
「译文」Grafana Loki 简要指南:关于标签您需要了解的一切
|
监控 Java 大数据
如何在Java中实现批量数据处理
如何在Java中实现批量数据处理
|
10月前
|
云安全 人工智能 安全
七项满分,阿里云安全能力再获认可
IDC发布《中国公有云服务提供商安全技术能力评估,2024》报告,首次针对中国12家公有云服务提供商进行安全技术能力综合评测。阿里云在安全计算环境保障能力、安全区域边界保障能力、安全通信网络保障能力等7项评估维度中均获得满分,其安全技术能力再次获得权威机构认可。
|
存储 安全 5G
|
JavaScript
ThreeJs模拟工厂生产过程八
这篇文章详细介绍了如何在Three.js中模拟工厂生产过程的第八部分,重点是优化场景中的模型,包括合并货架上的料箱以减少渲染负担,并替换设备模型以增强场景的真实性和互动性。
241 0
|
机器学习/深度学习 算法 数据可视化
【机器学习】ID3、C4.5、CART 算法
【机器学习】ID3、C4.5、CART 算法
|
算法 NoSQL 数据库
ID生成服务系列(二)
ID生成服务系列(二)
|
机器学习/深度学习 人工智能 自然语言处理
生成式 AI 与 LangCHain(三)
生成式 AI 与 LangCHain(三)
295 2