[开发者心得] 【开发tips】使用 HTTP 请求调用第三方 API 接口

[复制链接]
1213 |3
汽汽汽汽水 发表于 2023-6-26 17:02:30 | 显示全部楼层 |阅读模式
本帖最后由 汽汽汽汽水 于 2023-12-4 09:39 编辑

适用版本 v 0.27.0.0

在我们开发中,除了与游戏服务端通讯来同步游戏物体,有时还需要与其它服务端通讯来获取或记录一些特殊的数据, 常见的比如玩家的行为数据、通过关卡的速度、点击某个UI界面的次数等,用这些数据来分析游戏的进度。在口袋方舟中,我们提供调用 HTTP 接口的方法,让开发者实现与其它服务端通讯。

我们使用这个接口:fetch(); 来实现 HTTP 请求。
接下来我会编写一个示例,从 Github 公开的接口获取某个用户的基础信息,先看下实际效果
img_v2_b9e8b2da-2b46-4d76-8f0c-65ff864eb4dg.jpg

GitHub API 接口请求地址: api.github.com/users/onionkingdom
我们可以先在浏览器中访问一下这个地址,查看下返回结果:
image.png


可以看到访问之后的返回了一个标准的 Json 结构,所以我们可以在代码中使用 JSON 方法来解析它,并把用户的地址输出出来。

关键代码:

export default class HttpDemo extends UIScript {

    protected onStart() {
        this.layer = UILayerMiddle;

        // 发起请求的按钮
        const requestBtn = this.uiWidgetBase.findChildByPath("RootCanvas/requestBtn") as Button;
        // 请求地址 文本框
        const requestText = this.uiWidgetBase.findChildByPath("RootCanvas/requestText") as InputBox;
        // 响应内容 文本框
        const responseText = this.uiWidgetBase.findChildByPath("RootCanvas/responseText") as InputBox;
        // Json 解析内容 文本框
        const jsonText = this.uiWidgetBase.findChildByPath("RootCanvas/jsonText") as TextBlock;

        // 请求按钮被点击
        requestBtn.onClicked.add(() => {
            // 通过 输入框 拿到请求地址
            const requestUrl = requestText.text;
            // 发起 http 请求
            fetch(requestUrl).then(async (res) => {
                // 通过 HTTP 状态码 判断请求状态 200 为成功
                if (res.status == 200) {
                    // 请求成功获取内容
                    const resText = await res.text();
                    if (resText != null) {
                        responseText.text = resText;
                        // 尝试格式化
                        try {
                            const jsonObj = JSON.parse(resText);
                            // 格式化成功 获取 location 属性
                            jsonText.text = '位置' + jsonObj['location'];
                        } catch (error) {
                            console.log("解析出错,源数据可能不是正确的 Json 格式!")
                            jsonText.text = "无法使用Json解析";
                        }
                    }
                } else {
                    console.warn("请求失败!");
                }
            });

        });

    }
}



完整项目:

HttpDemo.zip (118.03 KB, 下载次数: 75)
回复

使用道具 举报

汽汽汽汽水楼主 发表于 2023-7-24 18:09:14 | 显示全部楼层
http://worldtimeapi.org/api/timezone/Asia/Shanghai

一个比较好用的获取时间 API

回复

使用道具 举报

游戏创作者-李涛 发表于 2023-7-26 18:47:36 | 显示全部楼层
可以使用socket吗?
回复

使用道具 举报

汽汽汽汽水楼主 发表于 2023-7-26 18:48:11 | 显示全部楼层

socket 目前不行
回复

使用道具 举报

热门版块
快速回复 返回顶部 返回列表