如何写好一个接口

接口设计

  • 接口要注意拓展性,设计得灵活一些,应对业务的变化。
  • 字段尽量不要耦合在一起。
  • 接口尽量通用。能调用一次完成的,不用调用两次。网络IO是很慢的。
  • 接口的字段,尽量少一些,字段越多,越混乱,越难联调。
  • 能批量处理,尽量批量处理。
  • 如果不存在依赖关系,能异步处理,尽量异步处理。
  • 状态变量,尽量不要连续,比如1234,可以用10,20,30,方便在中间新增状态变量。
  • 常用的接口功能,一般有查询(列表),新增,修改,删除,详情,导入,导出。
    查询列表页接口,不要跟详情页接口用同一个。

代码规范

  • 下载代码规范插件,Alibaba Java Coding Guidelines 。遵循《阿里巴巴java开发手册》。
  • 下载代码检查插件,SonarLint。

日志

  • 关键的入参,最好打印日志,否则出了问题,很难定位。

  • 关键的方法,在结束前,可以打印日志。方便定位问题。

  • 异常日志,最好打印出异常的方法栈,以及对应的参数,能够还原现场,定位问题。

  • 日志的级别要明确。关键的日志用 info级别,调试的日志用 debug 级别,错误日志用 error 级别。
    特殊的if else分支可以用warn(比如判断用户id为空之类)。

分层

  • 根据不同的项目,使用 Controller-Service-Dao, 或者 Controller–Service–Manager–Dao。

Manager层是通用的数据库CRUD(增删改查),而Service层则是由多种CRUD构成的业务逻辑。

对象参数

  • 入参用 DTO,出参用 VO,数据库对应的用 Entity或者DO。

  • 参数如果有很多个,最好封装成对象。

  • VO对象,哪怕是没有值的属性,最好也设置一个值,否则前端获取到对象后还得判断是否存在对应的属性。

参数校验

  • 参数是否必需,缺少参数要提示。
  • 字符串参数,是否可以为 null,是否可以为空字符串
  • Integer参数,能否为 null,能否为空

异常处理

  • 异常处理,返回用户能理解的异常提示。

  • 如果有统一异常处理最好,如果没有,在控制层要处理好异常。

面向对象

面向对象编程和面向对象设计的五个基本原则。

  • Single Responsibility Principle(单一职责原则)

  • Open Closed Principle(开闭原则)

  • Liskov Substitution Principle(里氏替换原则)

  • Interface Segregation Principle(接口隔离原则)

  • Dependency Inversion Principle(依赖倒置原则)

详情见: https://blog.csdn.net/Taobaojishu/article/details/114313082

单元测试

  • 最好写下单元测试,尽量提高覆盖率,减少线上问题。

在做重构的时候,有单元测试可以测试,不用担心重构出错。
线上出现问题,可以通过单元测试用例,快速测试。

对接第三方系统

  • 对接第三方系统,往往会比较耗时。在初次查询第三方系统后,可以考虑能否做缓存处理、或者本地数据表存储。
  • 对接第三方系统,关键的地方,最好记录日志。

接口性能优化

详情见:https://blog.csdn.net/sinat_32502451/article/details/133053399

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/99528.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

国家开放大学 模拟试题训练

2208 政治学原理 参考试题 一、选择题(每题2分,共20分,每题至少有一个答案,多选少选均不能得分) 1.柏拉图在《理想国》-书中明确指出,政治的本质在于公正,一个“理想国”具有( )美德。 A.智慧…

【SV中的多线程fork...join/join_any/join_none】

SV中fork_join/fork_join_any/fork_join_none 1 一目了然1.1 fork...join1.2 fork...join_any1.3 fork...join_none 2 总结 SV中fork_join和fork_join_any和fork_join_none; Note: fork_join在Verilog中也有,只有其他的两个是SV中独有的; 1 一目了然 1.…

操作系统 OS

本文章是学习《操作系统》慕课版 和 王道《2024年 操作系统 考研复习指导》后所做的笔记,其中一些图片来源于学习资料。 目录 概念(定义) 目标 方便性 有效性 可扩充性 开放性 作用 OS 作为用户与计算机硬件系统之间的接口 — 人机交…

Stream流最佳实战

Stream流最佳实战 stream 进行排序、分组、多级分组、交集、并集、差集等 package com.al.admin.utils;import cn.hutool.core.util.ObjectUtil; import lombok.Data; import org.springframework.util.StringUtils;import java.text.SimpleDateFormat; import java.util.*; …

1、【gradio】快速开始,构建自己的机器学习的应用

1、【gradio】快速开始,构建自己的机器学习的应用 Gradio能做什么Hello, WorldInterface类组件属性多个输入和输出组件一个图片的ExampleChatbot(聊天机器人)Blocks:更多的灵活性和控制Hello, Blocks更复杂一点的实现先决条件:Gradio 需要 Python 3.8 或更高版本。 Gradio…

仅用61行代码,你也能从零训练大模型

本文并非基于微调训练模型,而是从头开始训练出一个全新的大语言模型的硬核教程。看完本篇,你将了解训练出一个大模型的环境准备、数据准备,生成分词,模型训练、测试模型等环节分别需要做什么。AI 小白友好~文中代码可以直接实操运…

取出SQLite数据(基本游标)

前面一节中已经为Starbuzz创建了一个SQLite帮助器。 目前还是从Java Drink类获取数据,这时候要修改这个应用从SQLite数据库获取数据。 本文所有代码均存放于 https://github.com/MADMAX110/Starbuzz 一、修改DrinkActivity来使用Starbuzz数据库 基本步骤&#xff…

Puppeteer基础知识(一)

Puppeteer基础知识(一) Puppeteer基础知识(一)一、简介二、其他一些自动化测试工具三、安装与使用四、Puppeteer常用命令五、常见问题解决: 一、简介 Puppeteer 是一个强大而灵活的工具,可以用于网页爬虫、…

Transformer预测 | Pytorch实现基于Transformer 的锂电池寿命预测(CALCE数据集)

文章目录 效果一览文章概述模型描述程序设计参考资料效果一览 文章概述 Pytorch实现基于Transformer 的锂电池寿命预测,环境为pytorch 1.8.0,pandas 0.24.2 随着充放电次数的增加,锂电池的性能逐渐下降。电池的性能可以用容量来表示,故寿命预测 (RUL) 可以定义如下: SOH(t…

QT位置相关函数

Qt(Qt Framework)是一个流行的C应用程序开发框架,提供了丰富的位置相关函数和类,用于处理窗口、窗口小部件和图形的位置和几何操作。以下是一些常用的Qt位置相关函数和类: QPoint:QPoint类表示一个二维点的…

RTC 时间、闹钟

实时时钟RTC是一个独立的定时器。RTC模块拥有一个连续计数的计数器,在软件配置下,可以提供时钟日历的功能。修改计数器的值可以重新设置当前时间和日期 RTC还包含用于管理低功耗模式的自动唤醒单元。 在掉电情况下 RTC仍可以独立运行 只要芯片的备用电源…

vue3中使用插件vite-plugin-svg-icons

在vue3 vite 项目中使用svg图标 插件:vite-plugin-svg-icons 预加载 在项目运行时就生成所有图标,只需操作一次 dom高性能 内置缓存,仅当文件被修改时才会重新生成 安装 yarn add vite-plugin-svg-icons -D # or npm i vite-plugin-svg-icons -D # or pnpm inst…

总结html5中常见的选择器

HTML5并没有引入新的选择器类型,它仍然使用CSS选择器来选择和操作HTML元素。HTML5中仍然可以使用CSS2和CSS3中定义的各种选择器。以下是HTML5中常见的选择器类型: 1. 元素选择器(Element Selector):使用元素名称作为选…

实现协议互通:探索钡铼BL124EC的EtherCAT转Ethernet/IP功能

钡铼BL124EC是一种用于工业网络通信的网关设备,专门用于将EtherCAT协议转换成Ethernet/IP协议。它充当一个桥梁,连接了使用不同协议的设备,使它们能够无缝地进行通信和互操作。 具体来说,BL124EC通过支持EtherCAT(以太…

2023,全网最真实的自动化测试学习路线,看不懂来打我!

随着测试行业的发展,“会代码”越来越成为测试工程师的一个标签。打开各大招聘网站,测试工程师月薪一万以上基本都有一个必备技能,那就是自动化测试。那么自动化测试到底难不难呢?下面我将会将我的经历讲给大家听,希望…

安卓App使用HttpURLConnection发送请求与上传文件

安卓原生App开发时常用的http开发工具 系统内置http请求工具为 HttpURLConnectionhttpClient 是 apache 的开源工具okHttp 使用更简单,语法相对HttpURLConnection也简洁了许多,需要在graddle添加依赖。 本文主要讲解如何使用HttpURConnection向服务器发…

【java基础学习】之DOS命令

#java基础学习 1.常用的DOS命令: dir:列出当前目录下的文件以及文件夹 md: 创建目录 rd:删除目录cd:进入指定目录 cd.. :退回到上级目录 cd\ : 退回到根目录 del:删除文件 exit:退出dos命令行 1.dir:列出当前目录下的文件以及文件夹 2.md: 创建目录 …

[NewStarCTF 2023 公开赛道] week1 Crypto

brainfuck 题目描述&#xff1a; [>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<-]>>>>>>>.>----.<-----.>-----.>-----.<<<-.>>..…

黑豹程序员-架构师学习路线图-百科:AJAX

文章目录 1、什么是AJAX2、发展历史3、工作原理4、一句话概括 1、什么是AJAX Ajax即Asynchronous&#xff08;呃森可乐思&#xff09; Javascript And XML&#xff08;异步JavaScript和XML&#xff09; 在 2005年被Jesse James Garrett&#xff08;杰西詹姆斯加勒特&#xff09…

WuThreat身份安全云-TVD每日漏洞情报-2023-10-08

漏洞名称:Glibc ld.so本地权限提升漏洞 漏洞级别:高危 漏洞编号:CVE-2023-4911 相关涉及:系统-ubuntu_22.04-glibc-*-Up to-(excluding)-2.35-0ubuntu3.4- 漏洞状态:POC 参考链接:https://tvd.wuthreat.com/#/listDetail?TVD_IDTVD-2023-24714 漏洞名称:Apple macOS Ventura …