API 变更记录
更新于 27.10.2026
API中的内容VISH现在,发生了什么变化,以及我们如何警告不兼容的变化。 该页面与API一起更新;最后一次对账是2026年10月23日,d1和production。
今天版本v1
所有方法都在/api/v1;每个的描述都在the stand的OpenAPI中(/documentation,机器视图 — /documentation/json).
| 空气污染指数部分 | 看台 | 页面 |
|---|---|---|
| 时间表,会话,呼叫网格,更改,PDF和日历提要 | d1、生产 | 附表空气污染指数 |
| 机构、团体、教师、教室 | d1、生产 | 空气污染指数目录 |
| 课堂笔记,反应,个人笔记 | d1、生产 | 注及空气污染指数 |
| 推送订阅应用程序VISH | d1、生产 | 通知及日历 |
| API密钥:应用程序、自发布、重新发布 | d1、生产 | 身份验证 |
| 角色和权利 | d1、生产 | 访问权限(RBAC) |
研究所的分析和报告(/usage/export/…, /reports/institute)-法律 | d1、生产 | — |
“透过VISH”(OAuth2.1/OpenID连接, /oauth/…) | 仅限d1 | 透过VISH对于开发人员 |
大学数据模型(/university/…:工作量,教室占用,建筑物之间的转换)-理所当然 | 只有d1 | — |
上传csv和JSON格式的时间表(/exports/…) | 只有d1 | — |
历史
开发中(d1),2026年10月
- “透过VISH” -OAuth2.1和OpenID Connect:安装文档,
/oauth/token,/oauth/userinfo,/oauth/revoke,/oauth/introspect,ES256签名密钥。 你的申请登记在“开发人员页面”有效密钥的持有者。 - 大学数据模型 (
/university/…)是给有权利的员工的。 - 上载时间表 (
/exports/…)为所有人提供CSV和JSON是正确的analytics:export. - 新的权利和角色。
analytics:export-上传分析作为一个文件(它是由所有已经有角色接收analytics:read);places:read,places:write,leads:read,leads:write,ads:read,ads:draft,ads:manage-对于仍在准备中的地点,合作伙伴和广告部分;角色analyst,sales,而adsManager. 分析发现(analytics:read)现在写入审计日志-每人不超过一个条目,每10分钟一个端点。 - 该“开发人员” 参考指南中的部分包含这些页面,其中包含在d1上测试的示例。
0.12—2026年10月20日
- 在没有应用程序的情况下为自己发放密钥(
POST /api-keys/mine)-适用于有权api:keys:self-issue;长达730天。 - 研究所的月度报告作为数据:
GET /reports/institute?month=ГГГГ-ММ-只有摘要数字。
0.11—2026年10月7日
- 钥匙动了“致开发人员”页面以及API文档的链接.
0.10.4—2026年10月4日
- 频率限制不能再用虚构的令牌或密钥来规避:这样的请求被认为是在地址上。 登录的人和有效的密钥仍然有自己的限制。
二○二六年九月二十二日
- 一个新的生产平台。 角色和API密钥的请求。
我们如何更改API
- 在v1内部-它仅兼容。 新方法、可选参数、响应中的新字段和列表中的新值,如
change或lessonType可能出现。 写入客户端,以便不熟悉的字段或值不会破坏它。 - 错误消息 (
error.message)可随时更改;机器代码(error.code)不能。 - 不兼容的更改 -删除方法或字段,更改含义或格式-将是新地址的新版本。 我们会在这里和“最新消息”应用程序部分,和旧版本将一起工作一段时间。
- 首先,d1。 所有新的东西都首先出现在d1上,然后才在生产中每两周发布一次。 在发布之前检查d1上的集成。
你的立场是什么?
该示例读取展台的OpenAPI,并告诉您其中有多少方法,哪些组(标签)最大,以及展台是否有“a VISH”启用输入。:
// What this stand's API offers: operations per tag and whether «Sign in with VISH» is on.
const API = process.env.VISH_API ?? 'https://d1.vish-app.ru/api/v1'
const response = await fetch(new URL('/documentation/json', API))
if (!response.ok) throw new Error(`OpenAPI: HTTP ${response.status}`)
const openapi = await response.json()
const perTag = new Map()
let total = 0
for (const [path, methods] of Object.entries(openapi.paths)) {
if (path !== '/health' && !path.startsWith('/api/v1/')) throw new Error(`unversioned path ${path}`)
for (const operation of Object.values(methods)) {
total++
for (const tag of operation.tags ?? []) perTag.set(tag, (perTag.get(tag) ?? 0) + 1)
}
}
if (total === 0 || !perTag.has('schedule')) throw new Error('no schedule operations')
const discovery = await fetch(`${API}/oauth/.well-known/openid-configuration`)
console.log(`${openapi.info.title} ${openapi.info.version}: ${total} operations`)
console.log([...perTag].sort((a, b) => b[1] - a[1]).slice(0, 8).map(([tag, count]) => `${tag} ${count}`).join(', '))
console.log('Sign in with VISH:', discovery.ok ? 'on' : `off (HTTP ${discovery.status})`)验证:2026-10,PWA aa337c45,平台bff65fce._