当前位置: 首页 > news >正文

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附表(部分):
在这里插入图片描述

相关文章:

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

【强制】前后端交互的 API,需要明确协议、域名、路径、请求方法、请求内容、状态码、响 应体。 说明: 协议:生产环境必须使用 HTTPS。路径:每一个 API 需对应一个路径,表示 API 具体的请求地址: a&#xff…...

Linux网络服务部署yum仓库

目录 一、网络文件 1.1.存储类型 1.2.FTP 文件传输协议 1.3.传输模式 二、内网搭建yum仓库 一、网络文件 1.1.存储类型 直连式存储:Direct-Attached Storage,简称DAS 存储区域网络:Storage Area Network,简称SAN&#xff0…...

智慧工地AI识别安全预警解决方案---豌豆云

实现在工地内所有视频覆盖区域对工人未穿工作服的24小时AI识别监测,发现人员未穿工作服及时报警至平台; 实现在工地内重点关注区域的AI人员统计; 实现在工地内监控覆盖区域的烟雾、火源24小时AI识别检测,发现烟雾、火源时及时报警,并通知相关负责人采取…...

红队打靶练习:TOMMY BOY: 1

目录 信息收集 1、arp 2、nmap 3、nikto 4、whatweb WEB robots.txt get flag1 get flag2 FTP登录 文件下载 更改代理 ffuf爆破 get flag3 crunch密码生成 wpscan 1、密码爆破 2、登录wordpress ssh登录 get flag4 信息收集 get flag5 信息收集 1、arp …...

Springboot中的@DependsOn注解

在我的最近的Spring Boot项目中,我遇到了涉及两个Bean的情况,Bean1和Bean2。在初始化过程中,我需要Bean2依赖于Bean1。 其中Spring中的 DependsOn 注解,允许我指定在创建Bean2之前,Spring应确保Bean1已初始化。 Depen…...

Django教程第5章 | Web开发实战-数据统计图表(echarts、highchart)

专栏系列:Django学习教程 前言 highchart,国外。 echarts,国内。 本项目集成 hightchart和echarts图表库实现数据统计功能。 包括:折线图,柱状图,饼图和数据集图。 效果图 echats Highcharts 源代码…...

【机器学习 西瓜书】期末复习笔记整理

一些杂点: 测试集如何归一化? —— 不是用测试集的均值和标准差,而是用训练集的! 机器学习: 对计算机一部分数据进行学习,然后对另外一些数据进行预测与判断。 参考计算例题: 机器学习【期末复习…...

回归预测 | Matlab基于SO-GRU蛇群算法优化门控循环单元的数据多输入单输出回归预测

回归预测 | Matlab基于SO-GRU蛇群算法优化门控循环单元的数据多输入单输出回归预测 目录 回归预测 | Matlab基于SO-GRU蛇群算法优化门控循环单元的数据多输入单输出回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab基于SO-GRU蛇群算法优化门控循环单元的数…...

自然语言处理实战项目25-T5模型和BERT模型的应用场景以及对比研究、问题解答

大家好,我是微学AI,今天给大家介绍一下自然语言处理实战项目25-T5模型和BERT模型的应用场景以及对比研究、问题解答。T5模型和BERT模型是两种常用的自然语言处理模型。T5是一种序列到序列模型,可以处理各种NLP任务,而BERT主要用于预训练语言表示。T5使用了类似于BERT的预训…...

分布式搜索——Elasticsearch

Elasticsearch 文章目录 Elasticsearch简介ELK技术栈Elasticsearch和Lucene 倒排索引正向索引倒排索引正向和倒排 ES概念文档和字段索引和映射Mysql与Elasticsearch 安装ES、Kibana安装单点ES创建网络拉取镜像运行 部署kibana拉取镜像部署 安装Ik插件扩展词词典停用词词典 索引…...

用python实现调用nosql

要使用Python调用NoSQL数据库,您需要使用适当的Python库。以下是使用Python调用MongoDB和Redis两个流行的NoSQL数据库的示例: 调用MongoDB 要使用Python调用MongoDB,您需要安装pymongo库。您可以使用以下命令在终端或命令提示符中安装它&…...

setTimeout和setInterval定时器的返回值

nodejs中定时器返回Timer对象,window中定时器返回number,所以可以使用ReturnType预定义类型推断—或者使用window.setInterval代替setInterval https://mybj123.com/13153.html...

C/C++指针

指针(pointer)是C/C语言中的一种数据类型。指针与int、char等数据类型相似,都是在内存中开辟相应类型的数据区域使用,不同的是int存储的是整数值,而指针存储的是内存地址。指针是在内存中开辟指针类型的区域存储内存地…...

2024 基于 Rust 的 linter 工具速度很快

2024 年 Web 工具的一大趋势是使用 Rust 重写现有工具。Rust 是一种出色的编程语言,能生成运行速度惊人的二进制文件,且与其它 Web 工具的互操作性极佳,这得益于 WebAssembly 的帮助。swc 和 Turbopack 等工具的速度提升为快速开发体验带来了…...

JWT相关问题及答案(2024)

1、什么是 JWT,它通常用于什么目的? JWT(JSON Web Token)是一种开放标准(RFC 7519),用于在不同实体之间安全地传输信息。它由三个部分组成:头部(Header)、载…...

Linux例行性工作 at和crontab命令

1,例行性工作 例行性工作 —— 在某一时刻,必须要做的事情 —— 定时任务 (比如:闹钟) 例行性工作分为两种:“单一的例行性工作 at”和“循环的例行性工作 crontab” 2,单一执行的例行性工作 …...

cookie共享和session共享实例演示

1、cookie共享实例 1.test1.share.com/index.php setcookie(dangqian, value, [domain > test1.share.com]); setcookie(gen, value, [domain > share.com]);2、test2.share.com/index.php $cookies $_COOKIE; // 打印所有Cookie的名称和值 foreach ($cookies as $n…...

设计模式之开闭原则:如何优雅地扩展软件系统

在现代软件开发中,设计模式是解决常见问题的最佳实践。其中,开闭原则作为面向对象设计的六大基本原则之一,为软件系统的可维护性和扩展性提供了强大的支持。本文将深入探讨开闭原则的核心理念,以及如何在实际项目中运用这一原则&a…...

Python Pandera 用于数据验证和清洗:是一个强大的工具用起来

今天为大家分享一个非常好用的 Python 库 - pandera。 Github地址:https://github.com/unionai-oss/pandera 在数据科学和数据分析中,数据的质量至关重要。不良的数据质量可能导致不准确的分析和决策。为了确保数据的质量,Python Pandera 库…...

英诺赛科推出BMS方案,搭载100V双向导通VGaN

BMS 俗称电池保姆或电池管家,主要是为了智能化管理及维护各个电池单元,防止电池出现过充电和过放电,保障电池安全使用的同时延长使用寿命。 当前市面上出现的电池管理系统大多数采用 Si MOS,由于 Si MOSFET 具有寄生二极管&#x…...

Python爬虫实战:研究MechanicalSoup库相关技术

一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

web vue 项目 Docker化部署

Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段: 构建阶段(Build Stage)&#xff1a…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来

一、破局:PCB行业的时代之问 在数字经济蓬勃发展的浪潮中,PCB(印制电路板)作为 “电子产品之母”,其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透,PCB行业面临着前所未有的挑战与机遇。产品迭代…...

通过Wrangler CLI在worker中创建数据库和表

官方使用文档:Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后,会在本地和远程创建数据库: npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库: 现在,您的Cloudfla…...

【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器

——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的​​一体化测试平台​​,覆盖应用全生命周期测试需求,主要提供五大核心能力: ​​测试类型​​​​检测目标​​​​关键指标​​功能体验基…...

oracle与MySQL数据库之间数据同步的技术要点

Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异,它们的数据同步要求既要保持数据的准确性和一致性,又要处理好性能问题。以下是一些主要的技术要点: 数据结构差异 数据类型差异&#xff…...

ABAP设计模式之---“简单设计原则(Simple Design)”

“Simple Design”(简单设计)是软件开发中的一个重要理念,倡导以最简单的方式实现软件功能,以确保代码清晰易懂、易维护,并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计,遵循“让事情保…...

中医有效性探讨

文章目录 西医是如何发展到以生物化学为药理基础的现代医学?传统医学奠基期(远古 - 17 世纪)近代医学转型期(17 世纪 - 19 世纪末)​现代医学成熟期(20世纪至今) 中医的源远流长和一脉相承远古至…...

OCR MLLM Evaluation

为什么需要评测体系?——背景与矛盾 ​​ 能干的事:​​ 看清楚发票、身份证上的字(准确率>90%),速度飞快(眨眼间完成)。​​干不了的事:​​ 碰到复杂表格(合并单元…...

41道Django高频题整理(附答案背诵版)

解释一下 Django 和 Tornado 的关系? Django和Tornado都是Python的web框架,但它们的设计哲学和应用场景有所不同。 Django是一个高级的Python Web框架,鼓励快速开发和干净、实用的设计。它遵循MVC设计,并强调代码复用。Django有…...