学习鸿蒙Next 之路 http

关于学习鸿蒙开发之http的请求

首先还是老样子先上代码,然后我再说出我的看法

先创建一个请求的函数
function RequestHttp(url:string,data?:Object|string){
}

先展示get请求,之前在unity的开发中只是用到了get和post。没想到在学鸿蒙前端的时候还用到put和del。其实这四个函数就是增删改查的意思,但是我在unity开发请求http的时候你只需要用到数据就可以了,而且接口的数据并不是所有的字段你都用得上所以我觉得在data参数真的没必要说是要用object类型,这里还是写一下把,因为看教学视频中有这么写的我还是在这里说一下。.

首先创建http,http这个是鸿蒙的包。
let req = http.createHttp()

再说这个url地址,get请求都是这样http://xxx.xxx.xxx/xx?name='张三'

如果请求的参数需要多写就是这样,需要有个&符号拼接
http://xxx.xxx.xxx/xx?name='张三'\&age=18

所以

1、我觉得url拼接的话不要在封装函数内部拼接,因为他是个工具

2、地址不是固定的,我解释下地址不固定为什么,但是一般的情况下地址是不会变的

在之前unity开发中,后台开发是接的设备硬件,你换设备厂商了,后台逻辑可能会更改,但是之前的后台接口可能是个通用的,后台会给你个新的接口地址

因为我不知道真正的鸿蒙开发是如何,搜一下资料很多都是axios,web前端开发的东西,emmmmm咱没接触过不是很懂。

在学习的时候看到个这个代码
const temp = Object.keys(data).map(key => {
${key}=${data[key]}
}).join('&')
urlstr += ?${temp}

这代码就是上述之前讲到的拼接字符串,但是我想的是如果你不需要这么多obj的字段属性,你传值的时候就不用拼接那么长,

比如查你的个人信息,你只需要出示你的身份证号就好了,你干嘛把你相关的亲戚也报出来呢?不知道大家明白我的意思没有?

你只需要传当前接口需要的字段,如果需求的字段很多你可以自己再去封装拼接地址的用法temp。一般不会的,都会有个唯一标识去查这个信息。

先说下请求函数参数,urlstr地址。另一个就是请求需要传的参数

req.request(urlstr, info)

//组装参数
let info: http.HttpRequestOptions = {
method: http.RequestMethod.GET,
extraData:''||data
header: {
ContentType: 'application/json',
Authorization: token
},
readTimeout: 10000, //10s不然就超时
expectDataType: http.HttpDataType.OBJECT//返回对象
}

HttpRequestOptions 参数method是请求的方法是什么方式,这里介绍的get ,extraData就是传的''空字符串,如果是post或者put就是data

这个data就是对象,你需要传这个对象,(下面是json对象展示)在鸿蒙里他好像是直接就可以对象转json发送给后端

{

'name':'张三',

'age':'18'

}

如果你需要有token验证的,你在header中就写上这个header的Authorization

接下来就是数据返回
let result = await req.request(urlstr, info)

函数的返回值是HttpResponse,他有个responseCode属性。可以根据这个code是多少判断 你请求成功还是其他问题

当然他是promiss类型的HttpResponse,需要在request前面加上await

返回后可以这么写,ResponseData函数后面是有泛型的标识的,这里好像没有显示出来
export interface ResponseData{
code: number
msg: string
data: T
}
let res = result.result as ResponseData

返回的result就对象就可以解析为一个状态码,一个消息,然后一个数据体,转一下直接用data就是你需要的数据对象,因为你请求的时候是有这个参数 expectDataType: http.HttpDataType.OBJECT//返回对象 不然你需要json.pase去转一下对象

那么return回来的就是这个对象。 return res.data 返回依旧是promiss 在函数中你就必须加上promisss 但是这个T的泛型标识还是没有显示(Promiss后面要有泛型标识)RequestHttp后面也有

async function RequestHttp(url: string,data?: object): Promise{

}

200responseCode就是成功,然后msg是ok 你就是请求成功了,如果请求不成功或者其他问题,看看responseCode 如果404那么你地址写错了,401说明你token过期了,你需要重新登录去获取token,如果是其他的responseCode,那么你就抛出个异常,看看问题出在哪里

在请求的时候用个try catch 包裹起来

console.error('err===============>', err)

return Promise.reject(err)

相关推荐
DKPT4 分钟前
大数据与人工智能之大数据架构(Hadoop、Spark、Flink)
服务器·笔记·学习·架构·系统架构
2401_8956108231 分钟前
4.7学习总结 java集合进阶
学习
微风轻吟挽歌31 分钟前
HTTP 308 错误永久重定向 (Permanent Redirect)
网络·网络协议·http
Double Point1 小时前
(三十七)Dart 中使用 Pub 包管理系统与 HTTP 请求教程
网络·网络协议·http
Y1nhl3 小时前
搜广推面经六十八
人工智能·pytorch·深度学习·学习·大数据技术
Hug Freedom.3 小时前
RISC-V AIA学习---IPI 处理器间中断
学习·risc-v
前端菜鸟日常6 小时前
鸿蒙版(ArkTs) 贪吃蛇,包含无敌模式 最高分 暂停和继续功能
华为·harmonyos
写代码的小王吧8 小时前
【安全】Web渗透测试(全流程)_渗透测试学习流程图
linux·前端·网络·学习·安全·网络安全·ssh
虾球xz9 小时前
游戏引擎学习第208天
学习·游戏引擎
小军要奋进9 小时前
httpx模块的使用
笔记·爬虫·python·学习·httpx