允许其他软件读取您的数据
API Studio:一次发布一个屏幕,颁发密钥,将其固定到地址,并像 MCP 服务器一样发布 AI 代理。
迟早有一天,TRANXACT 以外的系统或个人会需要您的数据:例如报表工具、合作伙伴的系统、需要价格表的网站,或者被问及您业务问题的 AI 代理。在“平台”下的 API Studio 中,您可以逐步设置数据访问权限——一次设置一个屏幕,一次设置一列。
在有人发布之前,外部无法访问任何内容。没有任何设置可以打开所有内容,也没有任何密钥可以访问所有内容。全新的部署完全没有 API 接口,这才是正确的初始状态,而不是等待被启用。
这四项决定,按顺序排列。
| 什么 | 它决定了什么 | 通常是谁做的 |
|---|---|---|
| 曝光 | 那个屏幕可能会离开这家公司——它的哪些列、哪些行,以及是否可以写回任何内容。 | 数据的所有者 |
| 客户 | 那款软件确实存在,它的名字是什么,应该联系谁,以及它代表你的哪个用户。 | 无论谁负责集成 |
| 一项拨款 | 这位客户可以通过这些动词达到这样的曝光度。 | 无论谁负责集成 |
| 允许的地址 | 密钥的来源可以是浏览器源、主机、单个服务器地址或网络。 | 无论谁负责集成 |
该平台为此提供了三种角色,并有意将它们区分开来。API 发布者决定哪些数据可以发布,但不能颁发密钥。API 注册者颁发密钥,但不能创建数据暴露。API 审核者读取所有内容,但不能进行任何更改。如果由一人持有,发布工资表并给自己颁发一个读取该表的密钥,就构成了一条完整的、无人监督的导出路径,其中每一步看起来都像是普通的管理变更。
发布屏幕
- 打开平台 → API Studio,然后选择一个屏幕。列表中包含了控制台的所有屏幕,数据直接来自产品本身——因此,本次版本发布时包含的屏幕也在其中。
- 勾选可能要离开的列。任何未勾选的内容都不会发送:无论是在列表中、单个记录中,还是在写回的内容中。一开始,所有选项都不会被勾选,这是有意为之。
- 确定动词。读取操作默认开启;创建、更改和删除操作各自独立,因为允许他们的系统读取你的物品主数据和允许他们的系统删除你的物品主数据并非同一语句。
- 您可以选择限制筛选条件——例如,仅显示已过账的发票,或仅显示今年的发票。所有列表页面都使用相同的筛选条件,每次调用服务器都会应用此筛选条件,调用方发送的任何内容都无法扩大筛选范围。
- 先保存吧。这只是草稿,草稿毫无意义。等你真正想发布的时候再发布。
- 在将密钥提供给任何人之前,请先点击“预览”。它会准确显示合作伙伴将收到的内容,以及有多少列数据被保留。
注册软件
客户端是软件的记录:它的名称、功能、联系人,以及——最重要的一点——它代表你的哪个用户。密钥发出的每一个调用都是以该用户的身份进行的。用户不能做的事情,密钥也不能做。
这是屏幕上最重要的字段,也是为什么权限设置只能缩小访问权限而不能扩大访问权限的原因。应该将密钥指向为此目的创建的用户,该用户应拥有能够完成任务的最窄角色——而不是因为方便就指向真正的管理员。
密钥本身只在发放时显示一次,之后不再显示。发放新密钥会立即使旧密钥失效。密钥可以收回而不会删除客户信息,因此登记簿仍然会记录谁曾使用过该密钥以及何时收回的。
钥匙可用于何处
未指定任何地址的密钥无法访问任何内容。任何未指定的地址都被视为不可访问,并且永远无法从任何地方访问,因为泄露的密钥可以在世界上的任何一台笔记本电脑上使用,这就是全部风险所在。入口点有四种:浏览器来源、引用主机、单个地址或 CIDR 格式的网络地址。
客户端可以被标记为可从任何位置使用,有时确实如此——例如,合作伙伴的出口地址确实发生了变化。这是一个需要特别注意的开关,旁边会显示警告信息,而不是默认设置。
应该把什么发送给负责整合的人员?
工作室会打印出这四个地址。基础地址是 /api/v1,密钥放在 Authorization: Bearer 标头中,/api/v1/resources 列出了此密钥可以访问的内容,而 /api/v1/openapi.json 与 OpenAPI 3.1 文档相同。
这两个信息都是根据请求它们的键生成的。合作伙伴永远不会收到一份列出四十个他们无法调用的端点的文档:他们的文档只描述了他们可以调用的端点,不包含其他任何内容,而且它不可能描述会被拒绝的路径,因为它是由请求处理程序检查的相同行构建的。
同样的数据也适用于人工智能代理。
地址 /api/v1/mcp 是一个模型上下文协议服务器。连接到该服务器的代理会获得一个工具,该工具对应密钥可能执行的每项操作,仅此而已——没有工具用于未发布的数据,也没有工具用于未授权的动词。这是同一个发布内容,只是针对模型而非开发者进行描述,因此两者永远不会出现不一致的情况。
在客户端编写 MCP 指令。这是唯一能让模型知道这些工具访问的是真实账本而非沙盒环境的地方,也是唯一能明确“订单”指的是采购订单而非销售订单的地方。
每次通话中会发生什么
发布调用并非数据库的捷径。它会经过身份验证,并根据权限和授权进行检查,然后以您的运行身份用户身份通过平台自身的 API 执行——这与控制台使用的路径相同。公司范围、业务部门范围、地点限制、关闭期间、发布规则、自定义字段、自定义逻辑、可编辑性和审计跟踪等所有限制均适用,因为它们运行的是同一套代码。
每次调用都会被记录,无论成功还是失败,并附上拒绝原因。该日志位于“平台”→“API Studio”→“API 调用日志”下,其中最值得关注的一条记录是来自未经授权地址的密钥请求。
当它不起作用时
| 伴侣看到的 | 它的含义 |
|---|---|
| 该API密钥无法识别。 | 钥匙错了,或者已经发放了新钥匙。 |
| 此 API 密钥没有允许的地址 | 目前还没有人说明它可能在何处使用。 |
| 此 API 密钥不允许从此处使用。 | 它会显示实际到达的来源和地址——通常是合作伙伴迁移了服务器。 |
| 这里不会发布任何以 X 开头的内容。 | 名称有误,或者该密钥未获得访问权限,或者它仍是草稿。 |
| 此密钥可能无法创建 X | 该曝光或授权不允许使用该动词。 |
| 您没有权限查看 X | 授权没问题,但运行用户身份有问题。工作室会在合作伙伴查找之前列出这些信息。 |
客户端列表中会显示“就绪”列,而不仅仅是状态,因为客户端可能处于活动状态,持有密钥,但实际上却什么也得不到——没有可用用户,没有允许的地址,什么权限都没有。下午的日常就是:明明显示“活动”,但每次调用都被拒绝。