ArkTS 网络请求学习 · 模拟服务器

预置账号:test / 123456 或 arkts / harmonyos。数据存内存,重启服务即重置。

一、基础请求

GET /api/hello — 纯文本响应(练习返回字符串)
GET /api/json — JSON 对象响应(统一 code/message/data 包装)
GET /api/query?name=张三&age=20 — 读取 URL 查询参数
GET /api/path/任意id — 读取路径参数(RESTful 风格)
GET /api/headers — 回显你的请求头(练习设置 Header)
GET /api/ip — 返回客户端 IP 与 UA

二、账号密码验证

POST /api/register — 注册
{"username":"小明","password":"abc123","nickname":"小明同学"}
POST /api/login — 登录(支持 JSON 和 form-urlencoded)
{"username":"test","password":"123456"}
成功返回 token
GET /api/profile — 需要登录:请求头 Authorization: Bearer <token>
POST /api/logout — 退出登录(需带 token)

三、RESTful 增删改查(Todo)

GET /api/todos — 列表
GET /api/todos/1 — 详情
POST /api/todos — 新增
{"title":"新任务"}
PUT /api/todos/1 — 修改
{"title":"改后标题","done":true}
DELETE /api/todos/1 — 删除

四、分页列表

GET /api/products?page=1&pageSize=10&category=书籍 — 共 87 条商品,支持分类筛选

五、表单与上传下载

POST /api/form — application/x-www-form-urlencoded
POST /api/upload — 上传任意文件内容(raw body),返回文件大小与摘要
GET /api/download — 下载文本文件(Content-Disposition 附件)

六、文本内容 / 文档(请求文字展示给用户)

GET /api/article/list — 文章列表(标题、摘要、作者、封面图 URL,练列表渲染)
GET /api/article/1 — 文章详情,content 是一大段 Markdown 正文(id 1~6)
GET /api/doc/plain — 纯文本文档(text/plain,拿到直接显示)
GET /api/doc/markdown — Markdown 原文(text/markdown)
GET /api/doc/html — HTML 富文本片段(RichText 组件练习)
GET /api/doc/echo?text=你好 — 文本回显,也支持 POST 提交 {"text":"..."}
GET /api/notice — 系统公告(启动弹窗场景)

七、图片请求(服务端实时生成,不用上传素材)

GET /api/image — 随机渐变 PNG,可带 ?w=400&h=300
GET /api/image/gradient?w=400&h=300&from=ff7a00&to=0a59f7&dir=h — 渐变图(dir: h 横 / v 纵 / d 对角 / r 径向)
GET /api/image/solid?w=200&h=200&color=ff0000 — 纯色图
GET /api/image/checker?size=20 — 棋盘格图
GET /api/image/avatar?seed=张三&size=200 — 头像(同 seed 永远同图案)
GET /api/image/big?w=1200&h=800 — 大图(约几 MB,练大图加载与内存)
GET /api/image/slow?ms=3000 — 3 秒后才返回(练加载占位)
GET /api/image/broken — 故意返回坏图(练加载失败兜底)
GET /api/image/text?text=你好ArkTS&w=400&h=200&bg=0a59f7 — 带文字的 SVG 图片
GET /api/image/list?count=12 — 图片地址列表(给瀑布流/相册练习)

八、特殊情况(错误与异常练习)

GET /api/status/500 — 返回任意 HTTP 状态码(400/401/403/404/500/502...)
GET /api/delay/3000 — 延迟 N 毫秒响应(练习加载态与超时处理)
GET /api/random-error?rate=0.5 — 按概率随机失败(练习重试机制)
GET /api/large — 返回约 1MB 大 JSON(练习大数据解析)

九、Cookie

GET /api/cookie/set?key=myKey&value=hello — 设置 Cookie
GET /api/cookie/get — 读取 Cookie

十、ArkTS 调用示例

// 1. 登录
import { http } from '@kit.NetworkKit';

const req = http.createHttp();
req.request('http://你的服务器IP:3000/api/login', {
  method: http.RequestMethod.POST,
  header: { 'Content-Type': 'application/json' },
  extraData: JSON.stringify({ username: 'test', password: '123456' })
}).then((response) => {
  const result = JSON.parse(response.result as string);
  console.log('token:', result.data.token);
});
// 2. 请求文章正文并展示(Text + Scroll)
const req2 = http.createHttp();
req2.request('http://你的服务器IP:3000/api/article/1')
  .then((resp) => {
    const res = JSON.parse(resp.result as string);
    this.docText = res.data.content;   // 一大段 Markdown 文本
    this.title = res.data.title;
  });

// 3. 加载网络图片(Image 组件)
Image('http://你的服务器IP:3000/api/image/gradient?w=400&h=300&from=ff7a00&to=0a59f7')
  .width('100%')
  .height(200)
  .objectFit(ImageFit.Cover)
  .alt($r('app.media.placeholder'))   // 加载中的占位图