API设计指南:详解HTTP状态码错误解析、HTTP方法及参数命名规则
目录
- 1、HTTP API规范
- 1.1 原则
- 1.2 协议
- 1.3 版本
- 1.4 路径
- 1.5 HTTP 方法(Method)
- 1.6 过滤信息
- 1.7 参数命名
- 1.8 HTTP 状态码(Response Code)
- 1.9 鉴权
- 2、状态码
- 2.1 API返回基础规范
- 2.2 常见的 HTTP 状态码
- 2.3 API错误信息应该放到响应实体中返回
- 2.4 列举我们遇到较多的错误码
- 2.4.1 200 OK
- 2.4.2 201 Created
- 2.4.3 202 Accepted
- 2.4.4 204 No Content
- 2.4.5 3XX 重定向
- 2.4.6 400 Bad Request
- 2.4.7 401 Unauthorized
- 2.4.8 403 Forbidden
- 2.4.9 404 Not Found
- 2.4.10 405 Method Not Allowd
- 2.4.11 406 Not Acceptable
- 2.4.12 408 Request Timeout
- 2.4.13 409 Gonfilct
- 2.4.14 410 Gone
- 2.4.15 413 Request Entity Too Large
- 2.4.16 414 Request-URI Too Long
- 2.4.17 415 Unsupported Media Type
- 2.4.18 429 Too Many Request
- 2.4.19 500 Internal Server Error
- 2.4.20 503 Service Unavailable
1、HTTP API规范
1.1 原则
友好,容易输入
简单,容易使用
灵活兼容上层UI、客户端
1.2 协议
在通过 API 与后端服务通信的过程中,应该使用 HTTPS 协议。
示例:https://api.niaonao.com/xxx
1.3 版本
针对产品正常迭代升级或需求变更需要改造升级接口时,需要保证升级新版本接口后,旧版本的接口仍然可用,直至调用旧版接口的所有服务全部下线,监控旧版接口为零请求量时,排期下线旧版接口。
解决方案:在URL中嵌入版本编号,版本号从 v1 开始。
版本不是强要求,根据实际产品进行规划,不会对接口频繁的迭代升级就不需要引入版本号来区分不同版本的接口。
例:https://api.niaonao.com/v1/xxx
1.4 路径
路径(Path)就是指向特定资源或资源集合的URL。
例如:path = /{版本}/{具体的业务功能}/{表名or实体}/{行为}
在路径的设计中,需要遵守以下约定:
- URL存在多个单词的方法名称时,使用驼峰式命名
- URL中资源的命名应该是名词
- URL是易读的
- URL不要暴漏服务器架构
- URL推荐使用动词,如getXXX、findXXX、deleteXXX。对外开放的服务,因很多浏览器和框架不支持PUT、DELETE,所以不推荐使用PUT、DELETE请求方式,推荐POST和GET。加动词见名知意
1.5 HTTP 方法(Method)
对于资源的具体操作类型,有下面五个方法
HTTP方法 | 对应SQL命令 | 方法说明 |
---|---|---|
GET | SELECT | 从服务器查询资源 |
POST | CREATE | 在服务器新建资源 |
PUT | UPDATE | 在服务器更新资源,客户端提供改变后的完整资源 |
PATCH | UPDATE | 在服务器更新资源,客户端提供改变的属性,服务端根据属性转换为改变后的资源 |
DELETE | DELETE | 从服务器删除资源 |
注:对外开放服务不要使用REST的PUT和DELETE,因为很多浏览器不支持,很多框架也不支持。内部服务可以使用PUT和DELETE。
1.6 过滤信息
如果记录数量较多,服务器不能一次性返回所有记录给用户。API应该提供过滤参数,过滤返回结果。
常见的分页参数是pageNum、pageSize,从第几页读取指定条数数据。nextFrom,size从第几条数据开始读取几条数据。
- ?nextFrom=10&limit=5:指定从第10条记录开始返回5条记录
- ?offset=10:指定返回记录的开始位置。
- ?pageNum=2&pageSize=100:指定第2页,读取100个记录。
- ?sortBy=id&order=asc:指定返回结果按照id属性排序,升序排序。
- ?id=1:指定筛选条件,id为1的记录
1.7 参数命名
参数单词应该使用小写,多个单词拼接的方法使用驼峰式命名。包括请求体body和请求头header里面的自定义参数。
1.8 HTTP 状态码(Response Code)
接口状态码和业务状态码应该互相独立。服务端正确处理后返回http code 200/201,返回的json数据统一增加状态描述。说明业务处理成功还是失败。
{"logId":123456,//提供日志追踪ID"code":1, //1:成功,其他为失败"message":"success", //失败或成功描述"data" :{ //接口正确处理时的信息}
}
业务code 按业务功能提供统一错误编码枚举。
不要直接将异常抛给客户端处理,一般需要一个统一的异常处理类,并且以统一格式将异常信息返回前端。
1.9 鉴权
API的身份认证应该使用OAuth 2.0框架。服务器返回的数据格式,应该尽量使用JSON,避免使用XML。
使用 OAuth2.0 的方式为 API 调用者提供登录认证。应该先通过登录接口获取Access Token后再通过token令牌调用需要身份认证的API。
Oauth 的路径设计示列
- RFC 6749 /token
- Twitter /oauth2/token
- Fackbook /oauth/access_token
- Google /o/oauth2/token
- Github /login/oauth/access_token
- Instagram /oauth/authorize
客户端在获得 access token 的同时应该在响应中包含一个名为 expires_in 的数据,它表示当前获得的 token 会在多少秒后失效。
{"access_token": "token....","token_type": "Bearer","expires_in": 3600
}
客户端在请求需要认证的 API 时,应该在请求头 Authorization 中带上 access_token。
Authorization: Bearer token…
当超过指定的秒数后,access token 就会过期,再次用过期/或无效的 token 访问时,服务端应该返回 invalid_token 的错误或 401 错误码。
httpHTTP/1.1 401 Unauthorized
Content-Type: application/json
Cache-Control: no-store
Pragma: no-cache
{"error": "invalid_token"
}
2、状态码
2.1 API返回基础规范
所有的API响应应该遵守HTTP设计规范,应该选择合适的HTTP状态码。不可以所有的接口都返回状态码为200的HTTP响应。
响应示例
HTTP/1.1 200 ok
Content-Type: application/json
Server: example.com
{
"code": 0,
"msg": "success","data": {"username": "username"}
}
或
HTTP/1.1 200 ok
Content-Type: application/json
Server: example.com
{"code": -1,"msg": "该活动不存在",
}
2.2 常见的 HTTP 状态码
状态码 | 补充说明 |
---|---|
1xx | 代表请求已被接受,需要继续处理 |
2xx | 请求已成功,请求所希望的响应头或数据体将随此响应返回 |
3xx | 重定向 |
4xx | 客户端原因引起的错误 |
5xx | 服务端原因引起的错误 |
只有来自客户端的请求被正确的处理后才能返回 2xx 的响应,所以当 API 返回 2xx 类型的状态码时,前端必须认定该请求已处理成功。
2.3 API错误信息应该放到响应实体中返回
当 API 发生错误时,应该返回出错时的详细信息。目前常见返回错误信息的方法有两种:“将错误详细放入 HTTP 响应首部”和“将错误详细放入响应实体中”。
考虑到易读性和客户端的易处理性,我们应该把错误信息直接放到响应实体中,并且错误格式应该满足如下格式:
{"message": "您查找的资源不存在","error_code": 404001
}
- 将错误详细放入 HTTP 响应首部
httpX-MYNAME-ERROR-CODE: 4001
X-MYNAME-ERROR-MESSAGE: Bad authentication token
X-MYNAME-ERROR-INFO: http://docs.example.com/api/v1/authentication
- 将错误详细放入响应实体中
HTTP/1.1 401 Unauthorized
Server: nginx/1.11.9
Content-Type: application/json
Transfer-Encoding: chunked
Cache-Control: no-cache, private
Date: Sun, 24 Jun 2024 10:02:59 GMT
Connection: keep-alive{"error_code":40100,"message":"Unauthorized"}
其中错误码error_code应该和 HTTP 状态码对应,也方便错误码归类,例如:
- 429 Too Many Requests
HTTP/1.1 429 Too Many Requests
Server: nginx/1.11.9
Content-Type: application/json
Transfer-Encoding: chunked
Cache-Control: no-cache, private
Date: Sun, 24 Jun 2024 10:15:52 GMT
Connection: keep-alive{"error_code":429001,"message":"你操作太频繁了"}
- 403 Forbidden
HTTP/1.1 403 Forbidden
Server: nginx/1.11.9
Content-Type: application/json
Transfer-Encoding: chunked
Cache-Control: no-cache, private
Date: Sun, 24 Jun 2024 10:19:27 GMT
Connection: keep-alive{"error_code":403002,"message":"用户已禁用"}
另外,应该在返回错误信息中,同时包含面向开发者和面向用户的提示信息。面向开发者的信息方便开发人员调试对接;面向用户的提示信息,可以直接展示给终端用户查看。
{"message": "直接展示给终端用户的错误信息","error_code": "业务错误码","error": "供开发者查看的错误信息","debug": ["错误堆栈,必须开启 debug 才存在"]
}
2.4 列举我们遇到较多的错误码
2.4.1 200 OK
200 状态码是最常见的 HTTP 状态码,在所有成功的 GET 请求中,应该返回此状态码。HTTP 响应实体部分应该直接就是数据,不要做多余的包装。
返回示例:
获取单个用户
{"id": 1,"username": "godruoyi","age": 88,
}
获取集合
[{"id": 1,"username": "godruoyi","age": 88,
},{"id": 2,"username": "foo","age": 88,
}]
2.4.2 201 Created
当服务器创建数据成功时,应该返回此状态码。常见的应用场景是使用 POST 提交用户信息,如:
- 添加了新用户
- 上传了图片
- 创建了新活动
可以返回201状态码。
HTTP/1.1 201 Created
Server: nginx/1.11.9
Content-Type: text/html; charset=UTF-8
Transfer-Encoding: chunked
Date: Sun, 24 Jun 2024 09:12:20 GMT
Connection: keep-alive
客户端只需要知道该请求操作成功与否,并不需要返回新资源的信息。响应体可为空
2.4.3 202 Accepted
该状态码表示服务器已经接受到了来自客户端的请求,但还未开始处理。常用短信发送、邮件通知、模板消息推送等这类很耗时需要队列支持的场景中;
返回该状态码时,响应实体应该为空。
HTTP/1.1 202 Accepted
Server: nginx/1.11.9
Content-Type: text/html; charset=UTF-8
Transfer-Encoding: chunked
Date: Sun, 24 Jun 2024 09:25:15 GMT
Connection: keep-alive
2.4.4 204 No Content
该状态码表示响应实体不包含任何数据,其中:
在使用 DELETE 方法删除资源成功时,必须返回该状态码
使用 PUT、PATCH 方法更新数据成功时,也应该返回此状态码
HTTP/1.1 204 No Content
Server: nginx/1.11.9
Date: Sun, 24 Jun 2024 09:29:12 GMT
Connection: keep-alive
2.4.5 3XX 重定向
所有API不应该返回3XX类型的状态码。因为返回格式包含html。API不要返回纯 HTML 结构的响应;若一定要使用重定向功能,应该返回一个响应实体为空的 3xx 响应,并在响应头中加上 Location 字段。
HTTP/1.1 302 Found
Server: nginx/1.11.9
Content-Type: text/html; charset=UTF-8
Transfer-Encoding: chunked
Cache-Control: no-cache, private
Date: Sun, 24 Jun 2024 09:41:50 GMT
Location: https://example.com
Connection: keep-alive<html>
<head>
<meta charset="UTF-8" />
<meta http-equiv="refresh" content="0;url=https://example.com" /><title>Redirecting to https://example.com</title>
</head>
<body>
Redirecting to <a href="https://example.com">https://example.com</a>.
</body>
</html>
加了重定向路径Location属性的空响应体3XX响应
HTTP/1.1 302 Found
Server: nginx/1.11.9
Content-Type: text/html; charset=UTF-8
Transfer-Encoding: chunked
Date: Sun, 24 Jun 2024 09:52:50 GMT
Location: https://godruoyi.com
Connection: keep-alive
2.4.6 400 Bad Request
由于明显的客户端错误(例如,请求语法格式错误、无效的请求、无效的签名等),服务器应该放弃该请求。
当服务器无法从其他 4xx 类型的状态码中找出合适的来表示错误类型时,都必须返回该状态码。
HTTP/1.1 400 Bad Request
Server: nginx/1.11.9
Content-Type: application/json
Transfer-Encoding: chunked
Cache-Control: no-cache, private
Date: Sun, 24 Jun 2024 13:22:36 GMT
Connection: keep-alive{"error_code":40000,"message":"无效的签名"}
2.4.7 401 Unauthorized
该状态码表示当前请求需要身份认证,以下情况都必须返回该状态码。
未认证用户访问需要认证的 API
access_token 无效/过期
客户端在收到 401 响应后,都应该提示用户进行下一步的登录操作。
HTTP/1.1 401 Unauthorized
Server: nginx/1.11.9
Content-Type: application/json
Transfer-Encoding: chunked
WWW-Authenticate: JWTAuth
Cache-Control: no-cache, private
Date: Sun, 24 Jun 2024 13:17:02 GMT
Connection: keep-alive{"message":"Token Signature could not be verified.","error_code": "40100"}
2.4.8 403 Forbidden
该状态码可以简单的理解为没有权限访问该请求,服务器收到请求但拒绝提供服务。
如当普通用户请求操作管理员用户时,必须返回该状态码。
HTTP/1.1 403 Forbidden
Server: nginx/1.11.9
Content-Type: application/json
Transfer-Encoding: chunked
Cache-Control: no-cache, private
Date: Sun, 24 Jun 2024 13:05:34 GMT
Connection: keep-alive{"error_code":40301,"message":"权限不足"}
2.4.9 404 Not Found
该状态码表示用户请求的资源不存在,如
获取不存在的用户信息
访问不存在的路径
都必须返回该状态码,若该资源已永久不存在,则应该返回 410 响应。
2.4.10 405 Method Not Allowd
当客户端使用的 HTTP 请求方法不被服务器允许时,必须返回该状态码。
如客户端调用了 POST 方法来访问只支持 GET 方法的 API
该响应必须返回一个 Allow 头信息用以表示出当前资源能够接受的请求方法的列表。
HTTP/1.1 405 Method Not Allowed
Server: nginx/1.11.9
Content-Type: application/json
Transfer-Encoding: chunked
Allow: GET, HEAD
Cache-Control: no-cache, private
Date: Sun, 24 Jun 2024 12:30:57 GMT
Connection: keep-alive{"message":"405 Method Not Allowed","error_code": 40500}
2.4.11 406 Not Acceptable
API 在不支持客户端指定的数据格式时,应该返回此状态码。如支持 JSON 和 XML 输出的 API 被指定返回 YAML 格式的数据时。
Http 协议一般通过请求首部的 Accept 来指定数据格式
2.4.12 408 Request Timeout
客户端请求超时时必须返回该状态码,需要注意的时,该状态码表示客户端请求超时,在涉及第三方 API 调用超时时,一定不可返回该状态码。
2.4.13 409 Gonfilct
该状态码表示因为请求存在冲突无法处理。如通过手机号码提供注册功能的 API,当用户提交的手机号已存在时,必须返回此状态码。
HTTP/1.1 409 Conflict
Server: nginx/1.11.9
Content-Type: application/json
Transfer-Encoding: chunked
Cache-Control: no-cache, private
Date: Sun, 24 Jun 2024 12:19:04 GMT
Connection: keep-alive{"error_code":40900,"message":"手机号已存在"}
2.4.14 410 Gone
和 404 类似,该状态码也表示请求的资源不存在,只是 410 状态码进一步表示所请求的资源已不存在,并且未来也不会存在。在收到 410 状态码后,客户端应该停止再次请求该资源。
2.4.15 413 Request Entity Too Large
该状态码表示服务器拒绝处理当前请求,因为该请求提交的实体数据大小超过了服务器愿意或者能够处理的范围。
此种情况下,服务器可以关闭连接以免客户端继续发送此请求。
如果这个状况是临时的,服务器应该返回一个 Retry-After 的响应头,以告知客户端可以在多少时间以后重新尝试。
2.4.16 414 Request-URI Too Long
该状态码表示请求的 URI 长度超过了服务器能够解释的长度,因此服务器拒绝对该请求提供服务。
2.4.17 415 Unsupported Media Type
通常表示服务器不支持客户端请求首部 Content-Type 指定的数据格式。如在只接受 JSON 格式的 API 中放入 XML 类型的数据并向服务器发送,都应该返回该状态码。
该状态码也可用于如:只允许上传图片格式的文件,但是客户端提交媒体文件非法或不是图片类型,这时应该返回该状态码:
HTTP/1.1 415 Unsupported Media Type
Server: nginx/1.11.9
Content-Type: application/json
Transfer-Encoding: chunked
Cache-Control: no-cache, private
Date: Sun, 24 Jun 2024 12:09:40 GMT
Connection: keep-alive{"error_code":41500,"message":"不允许上传的图片格式"}
2.4.18 429 Too Many Request
该状态码表示用户请求次数超过允许范围。如 API 设定为 60次/分钟,当用户在一分钟内请求次数超过 60 次后,都应该返回该状态码。并且也应该在响应首部中加上下列头部:
X-RateLimit-Limit: 10 请求速率(由应用设定,其单位一般为小时/分钟等,这里是 10次/5分钟)
X-RateLimit-Remaining: 0 当前剩余的请求数量
X-RateLimit-Reset: 1529839462 重置时间
Retry-After: 120 下一次访问应该等待的时间(秒)
HTTP/1.1 429 Too Many Requests
Server: nginx/1.11.9
Content-Type: application/json
Transfer-Encoding: chunked
X-RateLimit-Limit: 10
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 1529839462
Retry-After: 290
Cache-Control: no-cache, private
Date: Sun, 24 Jun 2024 11:19:32 GMT
Connection: keep-alive{"message":"You have exceeded your rate limit.","error_code":42900}
必须为所有的 API 设置 Rate Limit 支持。
2.4.19 500 Internal Server Error
该状态码必须在服务器出错时抛出,对于所有的 500 错误,都应该提供完整的错误信息支持,也方便跟踪调试。
2.4.20 503 Service Unavailable
该状态码表示服务器暂时处理不可用状态,当服务器需要维护或第三方 API 请求超时/不可达时,都应该返回该状态码,其中若是主动关闭 API 服务,应该在返回的响应首部加上 Retry-After 头部,表示多少秒后可以再次访问。
HTTP/1.1 503 Service Unavailable
Server: nginx/1.11.9
Content-Type: application/json
Transfer-Encoding: chunked
Cache-Control: no-cache, private
Date: Sun, 24 Jun 2024 10:56:20 GMT
Retry-After: 60
Connection: keep-alive{"error_code":50300,"message":"服务维护中"}
Powered by niaonao
相关文章:
API设计指南:详解HTTP状态码错误解析、HTTP方法及参数命名规则
目录 1、HTTP API规范1.1 原则1.2 协议1.3 版本1.4 路径1.5 HTTP 方法(Method)1.6 过滤信息1.7 参数命名1.8 HTTP 状态码(Response Code)1.9 鉴权 2、状态码2.1 API返回基础规范2.2 常见的 HTTP 状态码2.3 API错误信息应该放到响应…...
【D3.js in Action 3 精译_043】5.1 饼图和环形图的创建(三):圆弧的绘制
当前内容所在位置: 第五章 饼图布局与堆叠布局 ✔️ 5.1 饼图和环形图的创建 ✔️ 5.1.1 准备阶段(一)5.1.2 饼图布局生成器(二)5.1.3 圆弧的绘制(三) ✔️5.1.4 数据标签的添加(四&…...
7. 一分钟读懂“单例模式”
7.1 模式介绍 单例模式就像公司里的 打印机队列管理系统,无论有多少员工提交打印任务,大家的请求都汇总到唯一的打印管理中心,按顺序排队输出。这个中心必须全局唯一,避免多个队列出现资源冲突,保证打印任务井然有序。…...
如何让谷歌外链看起来更真实?
在SEO优化过程中,外链的自然性往往会被忽视,尤其是在一些急于见效的策略中,外链往往集中在高权重的少数几个网站上,导致外链结构单一且缺乏多样性。这样的外链网络容易让搜索引擎怀疑其真实性,进而影响网站排名。如何才…...
C标签和 EL表达式的在前端界面的应用
目录 前言 常用的c标签有: for循环 1 表示 普通的for循环的 2 常在集合中使用 表示 选择关系 1 简单的表示如果 2 表示如果。。否则。。 EL表达式 格式 : ${属性名/对象/ 集合} 前言 本篇博客介绍 c标签和el表达式的使用 使用C标签 要引入 …...
Luma 视频生成 API 对接说明
Luma 视频生成 API 对接说明 随着 AI 的应用变广,各类 AI 程序已逐渐普及。AI 已逐渐深入到人们的工作生活方方面面。而 AI 涉及的行业也越来越多,从最初的写作,到医疗教育,再到现在的视频。 Luma 是一个专业高质量的视频生成平…...
嵌入式基础:Linux C语言:Day7
重点: strlen()函数\strcpy()函数\strcat实现\strcmp()实现 数组的清空:bzero函数、memset函数 一、字符数组 <1> 概念 字符数组本质上就是一个数组,保存一个个字符,也一般用来保存字符串 字符串由多个字符组成的一个字符…...
阿里云盘permission denied
问题是执行 ./aliyunpan 时遇到了 Permission denied 的错误。这通常是因为文件没有执行权限。以下是解决问题的步骤: 检查文件权限 运行以下命令检查文件的权限: ls -l aliyunpan输出中会看到类似以下内容: -rw-r--r-- 1 user group 123…...
Flink学习连载文章12--FlinkSQL高级部分
eventTime 测试数据如下: {"username":"zs","price":20,"event_time":"2023-07-17 10:10:10"} {"username":"zs","price":15,"event_time":"2023-07-17 10:10:3…...
缓冲区溢出基础与实践
缓冲区溢出 缓冲区溢出是指当计算机向缓冲区内填充数据时超过了缓冲区本身的容量,溢出的数据覆盖在合法数据上。理想的情况是:程序检查数据长度并不允许输入超过缓冲区长度的字符,但是绝大多数程序都会假设数据长度总是与所分配的储存空间相匹…...
matlab figure函数 single 数据类型
1.matlab figure函数详细介绍 在MATLAB中,figure函数用于创建新的图形窗口或激活现有的图形窗口。以下是figure函数的详细介绍和用法: 基本用法 创建新图形窗口:不带任何参数调用figure会创建一个新的图形窗口,并将其设为当前活…...
量化交易系统开发-实时行情自动化交易-8.15.Ptrade/恒生平台
19年创业做过一年的量化交易但没有成功,作为交易系统的开发人员积累了一些经验,最近想重新研究交易系统,一边整理一边写出来一些思考供大家参考,也希望跟做量化的朋友有更多的交流和合作。 接下来会对于Ptrade/恒生平台介绍。 P…...
Vue03
目录 一、今日目标 1.生命周期 2.综合案例-小黑记账清单 3.工程化开发入门 4.综合案例-小兔仙首页 二、Vue生命周期 三、Vue生命周期钩子 四、生命周期钩子小案例 1.在created中发送数据 六、工程化开发模式和脚手架 1.开发Vue的两种方式 2.Vue CLI脚手架 基本介绍…...
【AI学习】Mamba学习(十九):关于S4-FouT
在前面《Mamba学习(十六):从S4到S5模型》一文中,提到了S4D-Lin,其具体状态矩阵A的初始化形式为: S4D-Lin对比S4D-Inv是一种更简单的形式,可以看作是对S4-FouT(S4的另外一种变体&am…...
YOLOv5-C3模块实现
YOLOv5-C3模块实现 🍨 本文为🔗365天深度学习训练营 中的学习记录博客 🍖 原作者:K同学啊 电脑系统:Windows11 显卡型号:NVIDIA Quadro P620 语言环境:python 3.9.7 编译器:jupyt…...
ubuntu下Qt5自动编译配置QtMqtt环境(10)
文章目录 [toc]1、概述2、下载QtMqtt源码3、编译4、验证5、参考6、视频 更多精彩内容👉内容导航 👈👉Qt网络编程 👈 1、概述 Qt默认是不包含mqtt库的,如果需要使用到mqtt库就只能自己编译配置; 网络所有的…...
切比雪夫不等式:方差约束下的概率估计
切比雪夫不等式:方差约束下的概率估计 背景 在概率分析中,切比雪夫不等式是一个常用的工具,它通过引入随机变量的 方差信息,给出了偏离均值的概率界限。这一不等式是对 马尔科夫不等式 的自然扩展,结合了更丰富的分布…...
SIP系列七:ICE框架(P2P通话)
我的音视频/流媒体开源项目(github) SIP系列目录 目录 一、NAT 1、NAT介绍 2、NAT类型 2.1、 完全圆锥型NAT 2.2、受限圆锥型NAT 2.3、端口受限圆锥型NAT 2.4、对称NAT 3、NAT打洞 3.1、不同一NAT下 3.2、同一NAT下 二、ICE 三、ICE中的SDP 至此&#x…...
小程序-基于java+SpringBoot+Vue的智慧校园管理系统设计与实现
项目运行 1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。 2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA; 3.tomcat环境:Tomcat 7.x,8.x,9.x版本均可 4.硬件环境:…...
Visual Studio 2022创建离线安装包
步骤1: 下载 Visual Studio 引导程序(最新版) 历史版本 步骤2 新建文件夹“E:\VS2022”,将下载的“vs_Professional.exe”拷贝到文件夹下在此文件夹窗口按住shift鼠标右键,选择“在此处打开powershell窗口” 步骤3 根据需要将代码复制到…...
Android 实现中英文切换
在开发海外项目的时候,需要实现app内部的中英文切换功能,所有的英文都是内置的,整体思路为: 创建一个sp对象,存储当前系统的语言类型,然后在BaseActivity中对语言进行判断; //公共Activitypubl…...
CmakeLists学习刨根问底
必要的两项内容 cmake_minimum_required(VERSION 2.5)project(mymuduo) 这行代码指定了构建项目所需的CMake最低版本为2.5。CMake是一个跨平台的自动化构建系统,它使用CMakeLists.txt文件来定义项目的构建过程。定义项目的名称为mymuduo。CMake将使用这个名称来生成…...
策略模式实战 - 猜拳游戏
**可以整体的替换一套算法,这就是策略模式。**这样对于同一个问题,可以有多种解决方案——算法实现的时候,可以通过策略模式来非常方便的进行算法的整体替换,而各种算法是独立封装好的,不用修改其内部逻辑。 具体的实…...
VoCo-LLaMA: Towards Vision Compression with Large Language Models
视觉语言模型在各种多模态任务上取得了显著的成功,但经常受到有限上下文窗口和处理高分辨率图像输入和视频的高计算成本的瓶颈。视觉压缩可以通过减少视觉令牌数量避免该问题。先前方法使用额外模块压缩视觉令牌并强制LLM理解压缩的令牌。然而,LLM对视觉…...
每日小知识
Kafka是一个分布式流平台,具有高性能、高可靠性和可扩展性的特点。它主要用于处理实时的数据流,将数据以高吞吐量的方式进行发布和订阅。以下是关于Kafka的几个基本概念和优势的介绍: 概念: 生产者(Producer…...
Linux其二设置端口号,静态ip以及命令
目录 1、VI编辑器 【linux版本的文本文件】 2) 补充的vi编辑器的其他内容(了解) 2、ln 连接的意思 link的缩写 3、文件的查看 【重点】 4、压缩与解压(重点) 5、find 查找命令 6、which & whereis 作用是一样的,表示某…...
吉林大学23级数据结构上机实验(第7周)
A 去火车站 寒假到了,小明准备坐火车回老家,现在他从学校出发去火车站,CC市去火车站有两种方式:轻轨和公交车。小明为了省钱,准备主要以乘坐公交为主。CC市还有一项优惠政策,持学生证可以免费乘坐一站轻轨&…...
SpringBoot(整合MyBatis + MyBatis-Plus + MyBatisX插件使用)
文章目录 1.整合MyBatis 1.需求分析2.数据库表设计3.数据库环境配置 1.新建maven项目2.pom.xml 引入依赖3.application.yml 配置数据源4.Application.java 编写启动类5.测试6.配置类切换druid数据源7.测试数据源是否成功切换 4.Mybatis基础配置 1.编写映射表的bean2.MonsterMap…...
【2024最新】基于Springboot+Vue的网上图书商城平台Lw+PPT
作者:计算机搬砖家 开发技术:SpringBoot、php、Python、小程序、SSM、Vue、MySQL、JSP、ElementUI等,“文末源码”。 专栏推荐:SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:Java精选实战项…...
JAVA-面向对象基础
文章目录 概要封装多态抽象类接口内部类为什么需要内部类 概要 面向对象是一种编程范式或设计哲学,它将软件系统设计为由多个对象组成,这些对象通过特定的方式相互作用 封装 将数据和操作数据的方法封装在一个类中,并通过访问修饰符控制对…...
Y3编辑器官方文档1:编辑器简介及菜单栏详解(文件、编辑、窗口、细节、调试)
文章目录 一、新建项目二、 编辑器主界面2.1 游戏场景2.2 导航栏/菜单栏2.3 功能栏三、菜单栏详细介绍3.1 文件3.1.1 版本管理3.1.2 项目管理(多关卡)3.1.2.1 多关卡功能说明3.1.2.2 关卡切换与关卡存档3.2 编辑3.2.1 通用设置3.2.2 键位设置3.3 窗口(日志)3.4 细节3.4.1 语言…...
力扣94题:二叉树的中序遍历
力扣94题:二叉树的中序遍历(C语言实现详解) 题目描述 给定一个二叉树的根节点 root ,返回它的中序遍历(Inorder Traversal)。 中序遍历的规则是: 先访问左子树;再访问根节点&…...
【数据结构】二叉树的性质和存储结构
性质 在二叉树的第i层上至多有2^{i-1}个结点,至少有1个结点 深度为k的二叉树至多有2^{k-1}个结点(k≥1),至少有k个结点 对任何一棵二叉树T,如果其叶子数为n0,度为2的结点数为n2,则n0n21 具有n个结点的完…...
【Spring项目】图书管理系统
阿华代码,不是逆风,就是我疯 你们的点赞收藏是我前进最大的动力!! 希望本文内容能够帮助到你!! 目录 一:项目实现准备 1:需求 (1)登录 2:准备…...
TCP编程案例
笔记:(本题可能需要的) TCP协议: TCP协议进行通信的两个应用进程:客户端、服务端。 使用TCP协议前,须先建立TCP连接,形成基于字节流的传输数据通道 传输前,采用“三次握手”方式…...
PyTorch 实现动态输入
使用 PyTorch 实现动态输入:支持训练和推理输入维度不一致的 CNN 和 LSTM/GRU 模型 在深度学习中,处理不同大小的输入数据是一个常见的挑战。许多实际应用需要模型能够灵活地处理可变长度的输入。本文将介绍如何使用 PyTorch 实现支持动态输入的 CNN 和…...
网络数据库
创建删除修改模式create schemadrop schema表create tabledrop tablealter table视图create view drop view索引create indexdrop index alter index 定义模式:create schema 《模式名》 authorization 《用户名》表定义语句 视图定义语句 授权定义语句//未指…...
【软考速通笔记】系统架构设计师⑲——专业英语
文章目录 一、前言二、常用名词三、架构风格四、非功能需求五、应用架构六、软件架构重用 一、前言 笔记目录大纲请查阅:【软考速通笔记】系统架构设计师——导读 二、常用名词 名词翻译architecture架构system系统design设计requirements需求components组件constr…...
Android APP自学笔记
摘抄于大学期间记录在QQ空间的一篇自学笔记,当前清理空间,本来想直接删除掉的,但是感觉有些舍不得,因此先搬移过来。 Android导入已有外部数据库 2015.06.26在QQ空间记录:在Android中不能直接打开res aw目录中的数据…...
Spring 事务和事务传播机制
Spring 事务和事务传播机制 一、Spring 事务的基本概念 事务是一组操作,被视为一个不可分割的工作单元,要么全部完成,要么全部失败回滚,以此来确保数据的一致性和完整性。Spring事务管理允许我们在应用程序中声明式地或编程式地…...
VSCode(四)CMake调试
1. 工具准备 1.1 C环境插件 1.2 CMake插件 2. Cmake工程 2.1 创建项目文件夹 ex:CMAKE_TEST 2.2 创建CMake工程 (shift ctl P), 选择"CMAKE: Quick Start": 2.3 填写project name: (ex: test_cmake) 2.4 选择”Executable“ 项目文件内会自动…...
创建存储过程
在student数据库中,创建一个名为ST_CHAXUN_01的存储过程,该存储过程返回计算机系学生的“姓名”、“性别”、“出生日期”信息。 操作步骤如下: ① 在“对象资源管理器”窗格中,展开“数据库”结点。 ② 单击相应的数据库&#…...
macOS 15.1.1 (24B2091) 系统中快捷键符号及其代表的按键的对照表
以下是 macOS 15.1.1 (24B2091) 系统中快捷键符号及其代表的按键的对照表: 符号按键名称描述⌘Command (Cmd)常用的功能键,用于执行大多数快捷操作。⌥Option (Alt)Option 键,常用于辅助操作和特殊字符输入。⇧ShiftShift 键,常用…...
ftp服务器搭建-安装、配置及验证
ftp服务器搭建-安装、配置及验证 #安装 sudo apt-get install vsftpd #配置文件 cat > /etc/vsftpd.conf << "EOF" listenNO listen_ipv6YES anonymous_enableNO local_enableYES write_enableYES dirmessage_enableYES use_localtimeYES xferlog_enable…...
windows ping 执行过程分析
控制台 PS C:\Users\Admin> ping mcs.zijieapi.com正在 Ping mcs.zijieapi.com [223.109.117.226] 具有 32 字节的数据: 来自 223.109.117.226 的回复: 字节32 时间31ms TTL49 来自 223.109.117.226 的回复: 字节32 时间30ms TTL49 来自 223.109.117.226 的回复: 字节32 时…...
强大的远程同步工具-rsync
rsync 强大的远程同步工具,也可用于本地目录和本地目录的同步,它最大的特点就是会自动判断进行增量同步; # “演示文档”后加了/,代表传输的是文件,建议destination也指定一个目录,该目录可以不存在&…...
蝉联第一 | IDC云系统软件市场报告2024H1,云轴科技ZStack独立云厂商第一
2024年12月,根据全球知名的IT市场研究和咨询公司IDC最新发布的《中国云系统软件市场跟踪报告2024H1》显示,2024年上半年中国云系统软件市场规模达到27.93亿元人民币,同比增长11.6%。在这一增长趋势中,云轴科技ZStack作为云系统软件…...
【IPV6改造解读】
座右铭:我们每一个心怀希望的人,就像是一颗种子一样! 文章目录 前言一、IPV6改造基本情况分析二、IPV6针对不同场景改造方案1.网站/APP场景-IPV6云网关升级改造方案2.局域网专网(互联网侧)场景-安全大脑IPV6改造方案 总结 前言 提示…...
常用的Kali命令Top10
Kali Linux是一种基于Debian的Linux发行版,被广泛用于渗透测试和网络安全。以下是一些常用的Kali Linux命令的详细解释: ifconfig:显示和配置网络接口的信息。可以用于查看当前系统的IP地址、网关和子网掩码等。 apt-get:用于安装…...
阿里巴巴正式发布了全新大型语言模型Marco-o1
每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…...