目录
[1) GET请求:【查】获取数据](#1) GET请求:【查】获取数据)
[2) POST请求:【增/改】提交/上传数据](#2) POST请求:【增/改】提交/上传数据)
[4) DELETE请求:【删】删除数据](#4) DELETE请求:【删】删除数据)
本篇文章来分享一下网络请求,网络请求是开发中客户端(游戏/APP/网页)和服务端交互数据的核心方式,所有项目都会用到(如请求后端接口、加载网络图片、提交表单数据、下载资源都是网络请求)。
1.什么是网络请求?
客户端主动发起、向服务端/远程服务器要数据/ 发数据 / 要资源,服务端接收后返回对应结果的过程,就叫网络请求。
● 核心本质:客户端与服务端的数据交互通道
● 举例:Unity里提交用户表单、加载远程配置表、获取排行榜数据、下载更新资源包、上传截图,都是网络请求;网页里登录账号、加载商品列表,也是网络请求。
2.按「请求方式/请求动词」分类
按「请求方式/ 请求动词」 分类网络请求, 是开发中最核心、最常写代码用到的分类,所有网络请求都基于这套标准(HTTP/HTTPS协议规范) ,请求动词决定了这次请求要做什么操作,所有后端接口、Unity 网络请求都会标注该请求的类型,一共6个核心类型。
1) GET请求:【查】获取数据
● 核心作用:向服务端查询/读取数据,只做读操作,不修改服务端任何数据
● 特点:参数直接拼接在请求URL后面(比如 https://xxx.com/api/getUser?id=1001)、请求数据量有限、速度快、安全性低(参数可见)
● 开发场景:Unity里加载排行榜、获取用户信息、加载配置表、读取公告内容、加载网络图片地址,90%的查数据需求都用 GET
2) POST请求:【增/改】提交/上传数据
● 核心作用:向服务端提交/上传/新增数据,也可用于修改数据,会改变服务端的数据/状态
● 特点:参数放在请求请求体中(不在URL显示)、支持提交海量数据、速度略慢于GET、安全性高(参数不可见)
● 开发场景:Unity里用户注册、登录提交账号密码、提交表单数据、上传用户头像、提交游戏战绩、创建订单,所有需要提交数据的需求必用POST
3)PUT请求:【改】修改/更新数据
● 核心作用:向服务端完整更新一条数据(全量修改),语义上是修改
● 特点:和POST类似,参数在请求体,有幂等性,即多次请求结果一致(比如修改用户昵称,请求1次和10次结果一样)
● 开发场景:Unity里修改用户昵称、修改个人资料、更新游戏角色信息、修改配置参数,适合「全量更新一条完整数据」
4) DELETE请求:【删】删除数据
● 核心作用:向服务端删除指定数据,语义上是删除
● 特点:参数可拼URL/放请求体,同样有幂等性,多次删除同一数据结果一致
● 开发场景:Unity里删除游戏内的收藏内容、删除用户的历史记录、删除订单,所有删除操作都用DELETE。
5)PATCH请求:【改】局部更新数据
● 核心作用:向服务端只更新一条数据的某一部分(局部修改),比如只改用户头像,不改昵称和手机号
● 特点:比PUT更灵活,传输数据量更小,开发中用的少,后端接口不一定会开放该类型
● 场景:精细的局部数据修改,Unity项目中一般用POST替代即可
6)HEAD请求:仅获取响应头
● 核心作用:只请求服务端返回「响应头信息」,不返回具体数据内容
● 场景:判断文件是否存在、获取文件大小/更新时间,Unity开发中几乎用不到
总结:牢记常用的4个,增 (POST)、删 (DELETE)、改 (PUT)、查 (GET)
3.按「传输协议」分类
按「传输协议」 分类网络请求, 决定请求的底层规则,开发必知 。所有网络请求都基于传输协议实现,协议决定了数据怎么传、传的是否安全、速度快慢,Unity开发中只用到如下2种核心协议。
1)HTTP请求
● 全称:超文本传输协议 (HyperText Transfer Protocol)
● 特点:明文传输,数据在网络中是裸奔的,容易被劫持、篡改,安全性低;传输速度快,请求简单
2)HTTPS请求
● 全称:超文本传输安全协议 (HyperText Transfer Protocol Secure)
● 特点:HTTP+SSL/TLS加密,数据传输前会加密,传输后解密,无法被劫持篡改,安全性极高;速度略慢于HTTP
4.其他常用分类
4.1.按「返回数据格式」分类
网络请求的本质是传数据,数据的格式决定了怎么解析,只有2种格式:
1)JSON请求/响应
● 格式:轻量级文本格式,比如{"code":200,"msg":"success","data":{"name":"test","id":1001}}
● 优点:体积小、解析快、跨平台、前后端通用,Unity中用JsonConvert/JsonUtility等可以轻松解析
● 场景:所有接口请求(登录、注册、排行榜、配置表),Unity开发的绝对主流,99%的Unity项目首选
2)XML请求/响应
● 格式:标签式文本格式,比如 <user><id>1001</id><name>test</name></user>
● 缺点:体积大、解析繁琐、效率低
● 场景:仅老项目兼容,Unity新项目完全不用
4.2.按「请求目的/用途」分类
在Unity里写的所有网络请求,都能归到这些场景里:
1)接口请求
请求后端API接口(GET/POST),比如登录、注册、获取数据、提交数据,最核心的网络请求。
2)资源下载请求
下载图片、音频、视频、预制体、更新包、配置表,比如加载远程头像、下载游戏资源。
3)文件上传请求
上传图片、视频、日志文件,比如上传用户截图、上传游戏报错日志。
4)长连接请求
实时通信(比如游戏内聊天、实时对战),用WebSocket协议,不是普通的HTTP请求。
4.3.按「请求特征」分类
1)同步请求
● 特点:发起请求后,程序会卡住等待服务端返回结果,直到拿到结果才继续执行后续代码;
● 缺点:Unity中严禁使用!会导致游戏卡死、界面无响应,哪怕等待1秒也会让玩家感知卡顿;
● 总结:Unity中永远不要写同步网络请求。
2)异步请求
● 特点:发起请求后,程序不会卡住,继续执行其他代码,服务端返回结果后,会通过回调/委托/协程通知,再处理结果;
● 优点:不阻塞主线程,游戏界面流畅,无卡顿;
● 总结:Unity中所有网络请求,必须用异步方式实现,没有例外!
5.网络请求的完整生命周期
不管是哪种请求、哪种协议,所有网络请求都遵循固定的生命周期,开发中遇到请求失败、无响应、数据错误,按这个流程排查,几乎能找到问题:
客户端准备 → TCP三次握手 →【HTTPS专属:TLS握手 】 → 发送请求 → 服务端处理 → 返回响应 → TCP四次挥手 → 客户端解析
常见问题排查:请求失败 = 连接失败;无响应 = 超时;数据错误 = 解析失败;返回码 404 = 接口地址错;返回码 500 = 服务端报错。
想要详细了解,可以参考【超详细】网络请求的完整生命周期
好了,本次的分享到这里就结束啦,希望对你有所帮助~