写一个接口该注意什么?

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

前言:

小面学弟:小面,我刚学完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 系统监控
256 0
|
NoSQL 关系型数据库 MySQL
分布式锁(redis/mysql)
分布式锁(redis/mysql)
349 1
|
Linux 编译器 Shell
深入理解Linux中的动态库与静态库
深入理解Linux中的动态库与静态库
|
存储 C语言 Windows
音视频使用qt测试ffmpeg接口时无法运行
音视频使用qt测试ffmpeg接口时无法运行
282 0
|
5月前
|
存储 JSON API
深入研究:淘宝天猫商品详情查询API详解
淘宝开放平台提供一系列API接口,帮助开发者获取淘宝商品的详细信息并集成到自有应用中。主要功能包括:获取单个商品详情(item_get)、评论信息(item_review)、快递费用(item_fee)、等。此外,还支持搜索商品(item_search)、按图搜索(item_search_img)、优惠券查询(item_search_coupon)、类目信息(item_cat_get)等功能。返回数据通常为JSON格式,包含商品标题、价格、库存、主图链接等基本信息,以及HTML格式的详细描述内容,方便开发者解析与展示。
|
7月前
|
云安全 人工智能 安全
七项满分,阿里云安全能力再获认可
IDC发布《中国公有云服务提供商安全技术能力评估,2024》报告,首次针对中国12家公有云服务提供商进行安全技术能力综合评测。阿里云在安全计算环境保障能力、安全区域边界保障能力、安全通信网络保障能力等7项评估维度中均获得满分,其安全技术能力再次获得权威机构认可。
|
11月前
|
存储 安全 5G
|
11月前
|
JavaScript
ThreeJs模拟工厂生产过程八
这篇文章详细介绍了如何在Three.js中模拟工厂生产过程的第八部分,重点是优化场景中的模型,包括合并货架上的料箱以减少渲染负担,并替换设备模型以增强场景的真实性和互动性。
173 0
|
人工智能 编解码 自然语言处理
Sora文生视频模型深度剖析:全网独家指南,洞悉98%关键信息,纯干货
Sora文生视频模型深度剖析:全网独家指南,洞悉98%关键信息,纯干货
Sora文生视频模型深度剖析:全网独家指南,洞悉98%关键信息,纯干货
|
Linux 开发工具 C语言
【Qo聊天软件】安装muduo网络库
【Qo聊天软件】安装muduo网络库
202 0