---
name: "apiRequestByHighway"
mode: "kit"
versionRequirements:
  - { name: "MiniKit", version: "2.3.6" }
  - { name: "@ray-js/ray", version: "0.5.9" }
platform:
  - "iOS"
  - "Android"
async: true
title: "apiRequestByHighway - 发起 `highway` 请求"
---

## apiRequestByHighway

> [VERSION] MiniKit >= 2.3.6 | @ray-js/ray >= 0.5.9

> [PLATFORM] iOS, Android

> ⚡ **支持 Promise 调用** — 不传 success / fail / complete 回调时，该方法返回 Promise。

### 描述

发起highway请求

### 参数

| 属性 | 类型 | 必填 | 默认值 | 最低版本 | 描述 |
| --- | --- | --- | --- | --- | --- |
| `api` | `string` | 是 | - | `2.3.6` | api 名称 |
| `data` | `Record<string, any>` | 否 | - | `2.3.6` | Highway API 请求业务参数，字段结构由 api 对应的 Highway 接口定义 |
| `method` | `"OPTIONS" \| "GET" \| "HEAD" \| "POST" \| "PUT" \| "DELETE" \| "TRACE" \| "CONNECT"` | 否 | `'GET'` | `2.3.6` | method 请求方法 |
| `requestId` | `string` | 否 | - | `3.27.0` | requestId 请求ID，业务方不感知 |
| `cache` | `ApiRequestCacheBean` | 否 | - | `3.27.0` | cache 缓存配置 |
| `complete` | `() => void` | 否 | - | - | 接口调用结束的回调函数（调用成功、失败都会执行） |
| `success` | `(params: Object) => void` ↓见下方 | 否 | - | - | 接口调用成功的回调函数 |
| `fail` | `(params: Object) => void` ↓见下方 | 否 | - | - | 接口调用失败的回调函数 |

#### success 回调参数

| 属性 | 类型 | 最低版本 | 描述 |
| --- | --- | --- | --- |
| `data` | `Record<string, any>` | `3.2.0` | 接口返回的原始数据 |

#### fail 回调参数

| 属性 | 类型 | 描述 |
| --- | --- | --- |
| `errorMsg` | `string` | 错误信息 |
| `errorCode` | `string \| number` | 错误码 |
| `innerError` | `Object` | 错误扩展 |

##### fail(params).innerError 的属性

| 属性 | 类型 | 描述 |
| --- | --- | --- |
| `errorCode` | `string \| number` | 错误扩展码 |
| `errorMsg` | `string` | 错误扩展信息 |


### 引用对象

##### `interface` ApiRequestCacheBean

| 属性 | 类型 | 最低版本 | 描述 |
| --- | --- | --- | --- |
| `timeout` | `number` | `4.24.0` | 缓存超时时间，单位秒 |
| `policy` | `"NETWORK_ONLY" \| "CACHE_ELSE_NETWORK" \| "CACHE_THEN_NETWORK"` | `4.24.0` | 缓存策略，默认 CachePolicy.CACHE_THEN_NETWORK |


### 合法值

##### `method` 合法值

| 值 | 说明 |
| --- | --- |
| `"GET"` | HTTP 请求 GET |
| `"POST"` | HTTP 请求 POST |
| `"PUT"` | HTTP 请求 PUT |
| `"DELETE"` | HTTP 请求 DELETE |

##### `cache.policy` 合法值

| 值 | 说明 |
| --- | --- |
| `"NETWORK_ONLY"` | 仅发起网络请求，不使用缓存 |
| `"CACHE_ELSE_NETWORK"` | 先使用缓存，缓存不存在时发起网络请求 |
| `"CACHE_THEN_NETWORK"` | 优先使用缓存，同时发起网络请求，网络请求结果会通过事件下发 |


### 示例代码

#### Demo

```tsx
import { apiRequestByHighway } from '@ray-js/ray'

// Highway RESTful request: api is a "/v1.0/..." url, method is GET/POST,
// data depends on the specific highway api. (Real usage from @ray-js/ray miniapps.)
apiRequestByHighway({
  api: "/v1.0/m/tc/album/pic/batch/download/url",
  method: "POST",
  data: {},
  success: data => {
    console.log(data);
  },
  fail: error => {
    console.error(error);
  },
});
```
