API 文档 v1
IconSVR 提供免费、无鉴权的 SVG 图标 API 服务。通过简单的 HTTP GET 请求即可获取 IoT 图标,支持实时自定义颜色和尺寸。
🔄 版本迁移: 旧版
/api/svg.php 路径仍然可用,但建议迁移到新版 /api/v1/icon/{name} 路径,以获得更好的 RESTful 体验和标准化错误响应。
快速开始
在 HTML 中直接使用 <img> 标签引用:
<img src="https://iconsvr.com/api/v1/icon/temperature-sensor?cat=device&color=e34f32&size=48"
alt="Temperature Sensor">
API 端点总览
| 方法 | 端点 | 响应格式 | 说明 |
|---|---|---|---|
| GET | /api/v1/icon/{name} | SVG | 获取单个 SVG 图标 |
| GET | /api/v1/icons | JSON | 图标列表(分页、搜索、分类过滤) |
| GET | /api/v1/search | JSON | 全文搜索(带评分) |
| GET | /api/v1/categories | JSON | 分类列表 |
| GET | /api/v1/stats | JSON | 服务统计 |
| GET | /api/svg.php | SVG | V1 兼容(仍可用,建议迁移) |
获取 SVG 图标
GET /api/v1/icon/{name}
| 参数 | 位置 | 类型 | 必填 | 说明 | 示例 |
|---|---|---|---|---|---|
name | Path | string | ✅ 是 | 图标 slug(kebab-case) | temperature-sensor |
cat | Query | string | 否 | 分类 slug,加速查找 | device |
color | Query | string | 否 | 十六进制颜色值(不含 #) | e34f32 |
size | Query | int | 否 | 图标尺寸(px),范围 12-512,默认 24 | 48 |
stroke | Query | float | 否 | 描边宽度,范围 0.5-10 | 1.5 |
variant | Query | string | 否 | 图标变体(filled, outlined) | outlined |
format | Query | string | 否 | 响应格式(值为 json 时返回元数据) | json |
请求示例
基础调用
GET /api/v1/icon/plc-controller?cat=device
自定义颜色
GET /api/v1/icon/wifi?cat=communication&color=0066cc
自定义颜色和尺寸
GET /api/v1/icon/alarm?cat=status&color=dc2626&size=64
自定义描边
GET /api/v1/icon/gauge?cat=interface&color=059669&size=48&stroke=1.5
获取 JSON 元数据
GET /api/v1/icon/plc-controller?format=json
图标列表(JSON)
GET /api/v1/icons
| 参数 | 类型 | 必填 | 说明 | 示例 |
|---|---|---|---|---|
cat | string | 否 | 分类过滤 | device |
q | string | 否 | 搜索关键词(名称、标签、描述) | 传感器 |
page | int | 否 | 页码,默认 1 | 2 |
per_page | int | 否 | 每页数量,默认 50,最大 200 | 100 |
sort | string | 否 | 排序:newest, name, popular | popular |
GET /api/v1/icons?cat=device&q=传感器&page=1&per_page=20&sort=newest
响应示例:
{
"total": 160,
"page": 1,
"per_page": 50,
"total_pages": 4,
"category": "device",
"icons": [
{
"id": 1,
"name": "plc-controller",
"slug": "plc-controller",
"category": "device",
"category_name": "设备",
"tags": ["plc", "控制器"],
"viewbox": "0 0 24 24",
"file_size": 1847,
"url": "https://iconsvr.com/api/v1/icon/plc-controller",
"download_url": "https://iconsvr.com/icons/device/plc-controller.svg"
}
]
}
全文搜索
GET /api/v1/search
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
q | string | ✅ 是 | 搜索关键词(1-100 字符) |
cat | string | 否 | 限定分类 |
page | int | 否 | 页码,默认 1 |
per_page | int | 否 | 每页数量,默认 50,最大 200 |
GET /api/v1/search?q=温度&cat=device&page=1
响应示例:
{
"query": "温度",
"total": 3,
"category": "device",
"results": [
{
"id": 2,
"name": "temperature-sensor",
"slug": "temperature-sensor",
"category": "device",
"category_name": "设备",
"match_type": "name",
"score": 1.5,
"url": "https://iconsvr.com/api/v1/icon/temperature-sensor"
}
]
}
分类列表
GET /api/v1/categories
{
"categories": [
{
"slug": "device",
"name": "设备",
"description": "PLC、传感器、执行器等物理设备",
"icon_count": 45,
"icon": "https://iconsvr.com/api/v1/icon/plc-controller?size=48&color=0066cc"
}
]
}
服务统计
GET /api/v1/stats
{
"service": "IconSVR",
"version": "v1",
"total_icons": 71,
"total_categories": 6,
"total_api_calls": 125430,
"last_24h_calls": 3200,
"top_icons_7d": [...],
"endpoints": { ... }
}
响应格式
SVG 端点返回 Content-Type: image/svg+xml,JSON 端点返回 Content-Type: application/json。
公共响应头
| Header | 值 |
|---|---|
Content-Type | image/svg+xml; charset=utf-8 或 application/json; charset=utf-8 |
Access-Control-Allow-Origin | * |
Cache-Control | public, max-age=600(JSON)/ public, max-age=604800, immutable(SVG) |
X-Served-By | iconsvr.com |
X-API-Version | v1 |
X-RateLimit-Limit | 900(每分钟) |
错误响应
JSON 端点返回标准化错误:
{
"error": "not_found",
"message": "图标 'xxx' 不存在",
"code": 404
}
| HTTP Code | 错误类型 | 说明 |
|---|---|---|
| 400 | invalid_name | 图标名称格式无效 |
| 400 | invalid_color | 颜色格式无效 |
| 400 | invalid_size | 尺寸超出范围 |
| 400 | missing_param | 缺少必要参数 |
| 404 | not_found | 图标不存在 |
| 429 | rate_limited | 请求频率超限 |
| 500 | server_error | 服务内部错误 |
图标分类
| 分类 | slug | 说明 |
|---|---|---|
| 设备 | device | PLC、传感器、执行器、控制器等物理设备 |
| 通信 | communication | WiFi、BLE、Zigbee、LoRa、MQTT 等协议 |
| 状态 | status | 在线、离线、告警、正常等运行状态 |
| 场景 | scene | 工厂、能源、水务、楼宇等行业场景 |
| 界面 | interface | 仪表盘、开关、滑块、图表等 UI 控件 |
| 数据 | data | 数据库、时序数据、边缘计算等 |
使用场景
- 工业监控系统:在 SCADA / HMI 界面中嵌入设备状态图标
- IoT 平台:为设备列表、拓扑图提供统一图标
- 仪表盘:在 Grafana / ThingsBoard 等工具中使用
- 文档:在技术文档、架构图中引用 IoT 图标
- 低代码平台:为组件库提供 IoT 图标素材
- 第三方集成:通过 JSON API 集成到任意应用中
限制说明
- API 公开免费,无需注册或 API Key
- 请求频率限制:900 次/分钟/IP(JSON 端点)
- SVG 图标缓存时间:7 天
- JSON 端点缓存时间:10 分钟
- SVG 文件最大 20KB
- 仅支持 SVG 格式输出
- 建议使用
/api/v1/icon/{name}路径(RESTful)