05.阿里Java开发手册——前后端规约

  1. 【强制】前后端交互的 API,需要明确协议、域名、路径、请求方法、请求内容、状态码、响
    应体。
    说明:

    • 协议:生产环境必须使用 HTTPS。
    • 路径:每一个 API 需对应一个路径,表示 API 具体的请求地址:
      a) 代表一种资源,只能为名词,推荐使用复数,不能为动词,请求方法已经表达动作意义。
      b) URL 路径不能使用大写,单词如果需要分隔,统一使用下划线。
      c) 路径禁止携带表示请求内容类型的后缀,比如".json",“.xml”,通过 accept 头表达即可。
    • 请求方法:对具体操作的定义,常见的请求方法如下:
      a) GET:从服务器取出资源。
      b) POST:在服务器新建一个资源。
      c) PUT:在服务器更新资源。
      d) DELETE:从服务器删除资源。
      4) 请求内容:URL 带的参数必须无敏感信息或符合安全要求;body 里带参数时必须设置 Content-Type。
    • 响应体:响应体 body 可放置多种数据类型,由 Content-Type 头来确定。
  2. 【强制】前后端数据列表相关的接口返回,如果为空,则返回空数组[]或空集合{}。
    说明:此条约定有利于数据层面上的协作更加高效,减少前端很多琐碎的 null 判断。

  3. 【强制】服务端发生错误时,返回给前端的响应信息必须包含 HTTP 状态码,errorCode、errorMessage、用户提示信息四个部分。
    说明:四个部分的涉众对象分别是浏览器、前端开发、错误排查人员、用户。其中输出给用户的提示信息要求:简短清晰、提示友好,引导用户进行下一步操作或解释错误原因,提示信息可以包括错误原因、上下文环境、推荐操作等。 errorMessage:简要描述后端出错原因,便于错误排查人员快速定位问题,注意不要包含敏感数据信息。
    正例:常见的 HTTP 状态码如下
    1) 200 OK: 表明该请求被成功地完成,所请求的资源发送到客户端。
    2) 401 Unauthorized: 请求要求身份验证,常见对于需要登录而用户未登录的情况。
    3) 403 Forbidden:服务器拒绝请求,常见于机密信息或复制其它登录用户链接访问服务器的情况。
    4) 404 Not Found: 服务器无法取得所请求的网页,请求资源不存在。
    5) 500 Internal Server Error: 服务器内部错误。

  4. 【强制】在前后端交互的 JSON 格式数据中,所有的 key 必须为小写字母开始的lowerCamelCase 风格,符合英文表达习惯,且表意完整。
    正例:errorCode / errorMessage / assetStatus / menuList / orderList / configFlag
    反例:ERRORCODE / ERROR_CODE / error_message / error-message / errormessage /
    ErrorMessage / msg

  5. 【强制】errorMessage 是前后端错误追踪机制的体现,可以在前端输出到 type=“hidden”
    文字类控件中,或者用户端的日志中,帮助我们快速地定位出问题。

  6. 【强制】对于需要使用超大整数的场景,服务端一律使用 String 字符串类型返回,禁止使用
    Long 类型。

    说明:Java 服务端如果直接返回 Long 整型数据给前端,JS 会自动转换为 Number 类型(注:此类型为双精度浮点数,表示原理与取值范围等同于 Java 中的 Double)。Long 类型能表示的最大值是 2 的 63 次方-1,在取值范围之内,超过 2 的 53 次方 (9007199254740992)的数值转化为 JS 的Number 时,有些数值会有精度损失。扩展说明,在 Long 取值范围内,任何 2 的指数次整数都是绝对不会存在精度损失的,所以说精度损失是一个概率问题。若浮点数尾数位与指数位空间不限,则可以精确表示任何整数,但很不幸,双精度浮点数的尾数位只有 52 位。
    反例:通常在订单号或交易号大于等于 16 位,大概率会出现前后端单据不一致的情况,比如,“orderId”: 362909601374617692,前端拿到的值却是: 362909601374617660。

  7. 【强制】HTTP 请求通过 URL 传递参数时,不能超过 2048 字节。
    说明:不同浏览器对于 URL 的最大长度限制略有不同,并且对超出最大长度的处理逻辑也有差异,2048字节是取所有浏览器的最小值。
    反例:某业务将退货的商品 id 列表放在 URL 中作为参数传递,当一次退货商品数量过多时,URL 参数超长,传递到后端的参数被截断,导致部分商品未能正确退货。

  8. 【强制】HTTP 请求通过 body 传递内容时,必须控制长度,超出最大长度后,后端解析会出
    错。

    说明:nginx 默认限制是 1MB,tomcat 默认限制为 2MB,当确实有业务需要传较大内容时,可以通过调大服务器端的限制。

  9. 【强制】在翻页场景中,用户输入参数的小于 1,则前端返回第一页参数给后端;后端发现用
    户输入的参数大于总页数,直接返回最后一页。

  10. 【强制】服务器内部重定向必须使用 forward;外部重定向地址必须使用 URL 统一代理模块
    生成,否则会因线上采用 HTTPS 协议而导致浏览器提示“不安全”,并且还会带来 URL 维护
    不一致的问题。

  11. 【推荐】服务器返回信息必须被标记是否可以缓存,如果缓存,客户端可能会重用之前的请求
    结果。
    说明:缓存有利于减少交互次数,减少交互的平均延迟。
    正例:http 1.1 中,s-maxage 告诉服务器进行缓存,时间单位为秒,用法如下,
    response.setHeader(“Cache-Control”, “s-maxage=” + cacheSeconds);

  12. 【推荐】服务端返回的数据,使用 JSON 格式而非 XML。
    说明:尽管 HTTP 支持使用不同的输出格式,例如纯文本,JSON,CSV,XML,RSS 甚至 HTML。如果我
    们使用的面向用户的服务,应该选择 JSON 作为通信中使用的标准数据交换格式,包括请求和响应。此外,
    application/JSON 是一种通用的 MIME 类型,具有实用、精简、易读的特点。

  13. 【推荐】前后端的时间格式统一为"yyyy-MM-dd HH:mm:ss",统一为 GMT。
    14.【参考】在接口路径中不要加入版本号,版本控制在 HTTP 头信息中体现,有利于向前兼容。
    说明:当用户在低版本与高版本之间反复切换工作时,会导致迁移复杂度升高,存在数据错乱风险。

errorCode附表(部分):
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【SpringBoot3】Spring Boot 3.0 介绍以及新特性

文章目录 一、Spring Boot 3.01、介绍2、Spring Boot 核心概念3、Spring Boot 3.0 新特性 二、Spring Boot Starter1、介绍2、Starter 命名规则3、官方提供了哪些Starter 三、spring-boot-starter-parent 说明四、示例:创建web项目参考 一、Spring Boot 3.0 1、介绍…

【经典算法】有趣的算法之---遗传算法梳理

every blog every motto: You can do more than you think. 0. 前言 遗传算法是一种基于自然选择和遗传机制的优化算法,因此它通常被用于求解各种最优化问题,例如函数优化、特征选择、图像处理等。 一言以蔽之: 将数学中的优化问题&#xf…

compose部署

目录 本章目标: 自定义网络数据库 正文: 注:创建两个网络mynet和mynetwork 1. 自定义网络-mynet 创建自定义网络: docker network create --subnet172.33.0.0/16 mynet 查看网络信息 docker network list 查看指定网络的详细信…

Leetcode1441.用栈操作构建数组

文章目录 题目原题链接思路代码 题目 给你一个数组 target 和一个整数 n。每次迭代,需要从 list { 1 , 2 , 3 …, n } 中依次读取一个数字。 请使用下述操作来构建目标数组 target : “Push”:从 list 中读取一个新元素, 并将其…

Java中常用的加密算法及其实现原理详解

目录 1、前言 2、对称加密算法 2.1 对称加密算法的工作原理 2.2 DES、AES、RC4算法的原理及其在Java中的实现 2.3 对称加密算法的优缺点 3、非对称加密算法 3.1 非对称加密算法的工作原理 3.2 RSA、DSA算法的原理及其在Java中的实现 3.3 非对称加密算法的优缺点 4、散…

Lamp架构从入门到精通

系列文章目录 lnmp架构 lnmp架构-nginx负载均衡以及高可用 系列文章目录一、源码编译configure(检测预编译环境是否可行)makemake install优化关闭Debug 二、 nginx负载均衡三、nginx的高并发nginx work数量的设定nginx work进程与cpu的静态绑定压力测试nginx高并发修改操作系…

这三款内网管理监控软件让你事半功倍

在当今高度信息化的时代,企业内部网络(内网)已经成为企业运营和发展的重要支撑。 然而,随着内网规模的扩大和复杂性的增加,内网的管理和监控也变得越来越困难。 为了提高内网的管理效率和工作效率,许多企…

仅用三张图片实现任意场景三维重建:ReconFusion

论文题目: ReconFusion: 3D Reconstruction with Diffusion Priors 论文作者: Rundi Wu, Ben Mildenhall, Philipp Henzler, Keunhong Park, Ruiqi Gao, Daniel Watson, Pratul P. Srinivasan, Dor Verbin, Jonathan T. Barron, Ben Poole, Aleksande…

exFAT文件系统识别不了怎么办?

一般存储驱动器通常会使用几种文件系统,其中比较常见的是FAT32、NTFS和exFAT,那么它们之间有什么区别呢?exFAT文件系统识别不了怎么办? 常用文件系统之间的区别有哪些? FAT32文件系统:它是一个兼容性非常强…

关联系统-智能集成制动系统IPB

整车制动原理 在讲述IPB之前,需要先了解一下整车的制动原理: 如上图所示: 驾驶员踩下制动踏板,由于制动踏板和真空助力器连接,踏板下降的同时会导致真空助力器内压力增大,真空助力器推动制动液进入ESP&am…

九、Qt C++ 数据库开发

《一、QT的前世今生》 《二、QT下载、安装及问题解决(windows系统)》《三、Qt Creator使用》 ​​​ 《四、Qt 的第一个demo-CSDN博客》 《五、带登录窗体的demo》 《六、新建窗体时,几种窗体的区别》 《七、Qt 信号和槽》 《八、Qt C 毕业设计》 《九、Qt …

2024 1.6~1.12 周报

一、上周工作 论文研读 二、本周计划 思考毕业论文要用到的方法或者思想,多查多看积累可取之处。学习ppt和上周组会内容、卷积神经网络。 三、完成情况 1. 数据训练的方式 1.1 迁移学习 迁移学习是一种机器学习方法,把任务 A 训练出的模型作为初始模…

【剑指offer】替换空格

👑专栏内容:力扣刷题⛪个人主页:子夜的星的主页💕座右铭:前路未远,步履不停 目录 一、题目描述1、题目2、示例 二、题目分析1、replaceAll 方法2、StringBuilder3、临时数组 一、题目描述 1、题目 剑指of…

【Python3】【力扣题】387. 字符串中的第一个唯一字符

【力扣题】题目描述: 【Python3】代码: 1、解题思路:遍历字符串,依次判断元素在字符串中的个数是否为1,第一个为1的返回该元素的索引号,若整个字符串都没有个数为1的,则返回-1。 知识点&#…

武汉灰京文化:抓住用户心理,游戏推广不可或缺的前提

在当今激烈竞争的游戏市场中,了解目标用户成为游戏推广的不可或缺的前提。不同类型的游戏适合不同的用户群体,因此通过深入研究用户画像,准确定位目标用户群体,成为游戏成功推广的关键一环。游戏推广不仅仅是让更多的人知道游戏的…

运算符重载函数

C为了增强代码的可读性引入了运算符重载,运算符重载是具有特殊函数名的函数,也具有其返回值类型,函数名字以及参数列表,其返回值类型与参数列表与普通的函数类似。 函数名字为:关键字operator后面接需要重载的运算符符…

机器学习-决策树

1、什么是决策树? 一种描述概念空间的有效的归纳推理办法。基于决策树的学习方法可以进行不相关的多概念学习,具有简单快捷的优势,已经在各个领域取得广泛应用。 决策树是一种树型结构,其中每个内部结点表示在一个属性上的测试&a…

大数据Doris(五十六):SQL函数之地理位置函数

文章目录 SQL函数之地理位置函数 一、​​​​​​​ST_AsText(GEOMETRY geo)

Java - Lombok的添加和使用详解

目录 🐶6.1 lombok介绍 🐶6.2 lombok使用 1. 🥙添加方法一 2. 🥙添加方法2 3. 使用 🐶6.3 lombok常用注解 1. 🥙Getter和Setter 2. 🥙ToString 3. 🥙NoArgsConstructor和Al…

Docker入门安装、镜像与容器下载 —— 基本操作

目录 前言 Docker 1. docker介绍 2. docker安装 3. docker基本使用 3.1 镜像下载 3.2 操作容器 前言 虚拟机:基于主机(物理机或虚机)的多服务实例。在该模式下,软件开发人员可以提供单个或多个物理机或虚机,同时在每个主机上运行多个服…