# API 接口

API 接口配置提供了一些基于 [gRPC](https://grpc.io/)的 API 接口供远程调用。

可以通过 api 配置模块开启接口. 当 api 配置开启时，Xray 会自建一个出站代理，须手动将所有的 API 入站连接通过 [路由规则配置](./routing.md) 指向这一出站代理。

请参考本节中的 [相关配置](#相关配置)

::: warning
大多数用户并不会用到此 API，新手可以直接忽略这一项。
:::

## ApiObject

`ApiObject` 对应配置文件的 `api` 项。

```json
{
  "api": {
    "tag": "api",
    "services": ["HandlerService", "LoggerService", "StatsService"]
  }
}
```

> `tag`: string

出站代理标识。

> `services`: \[string\]

开启的 API 列表，可选的值见 [API 列表](#支持的-api-列表)。

## 相关配置

可以在 inbounds 配置中增加一个 api 的 inbound

```json
"inbounds": [
  {
    "listen": "127.0.0.1",
    "port": 10085,
    "protocol": "dokodemo-door",
    "settings": {
      "address": "127.0.0.1"
    },
    "tag": "api"
  }
]
```

在路由配置中增加针对 api inbound 的路由规则

```json
"routing": {
  "rules": [
    {
      "inboundTag": [
        "api"
      ],
      "outboundTag": "api",
      "type": "field"
    }
  ]
}
```

## 支持的 API 列表

### HandlerService

一些对于入站出站代理进行修改的 API，可用的功能如下：

- 添加一个新的入站代理；
- 添加一个新的出站代理；
- 删除一个现有的入站代理；
- 删除一个现有的出站代理；
- 在一个入站代理中添加一个用户（仅支持 VMess、VLESS、Trojan、Shadowsocks（v1.3.0+））；
- 在一个入站代理中删除一个用户（仅支持 VMess、VLESS、Trojan、Shadowsocks（v1.3.0+））；

### LoggerService

支持对内置 Logger 的重启，可配合 logrotate 进行一些对日志文件的操作。

### StatsService

内置的数据统计服务，详见 [统计信息](./stats.md)。

### ReflectionService

支持 gRPC 客户端获取服务端的 API 列表。

```bash
$ grpcurl -plaintext localhost:10085 list
grpc.reflection.v1alpha.ServerReflection
v2ray.core.app.proxyman.command.HandlerService
v2ray.core.app.stats.command.StatsService
xray.app.proxyman.command.HandlerService
xray.app.stats.command.StatsService
```

## API 调用示例

[Xray-API-documents](https://github.com/XTLS/Xray-API-documents) @crossfw
