创建/ api
一个动态的,多租借的API执行网关,代理引擎,和Webhook管弦乐路由层. 它安全地管理分布式集成架构,允许应用程序配置,评价,并执行复杂的第三方API配置和多步骤的苍蝇上宏工作流程. 将抽象语法树(AST)评价沙盒(NativeSandbox)在严格租户环境隔离的情况下,它将申报配置转变为低纬度外出集成,并在不引入跨租户数据泄露的情况下安全地入网.
包装船都把一体化减半。 在客户端上,第三方API通过HTML5属性或通过等同的JavaScript API进行声明消费. 在服务器上,网关解决了证书,评价了配置,并执行出局请求,因此API密钥从未到达浏览器.
文档
完整 API 参考文献、集成指南、网页浏览配置和使用示例,请访问 创建 API 文档。 。 。 .
目录
特征
- 抽象语法树 (AST) 微操作器: 评估函数配置内在语境,支持表达式语法标记(如
$data, (中文(简体) ),$event, (中文(简体) ),$actions,以及$request)和自定义商业逻辑操作员. - 声明客户界面 : 配置使用 HTML5 属性的完整请求和响应周期,从窗体字段组装有效载荷并映射结果回到文档中,而无需指定提供者代码.
- 租户环境隔离防火墙: 通过拦截执行矩阵和强行注射捆绑,保证加密数据分割
organization_id并核实host将数值输入核心操作. - 实时 WebSocket 集成矩阵 : 无缝钩入活服务器网络(
wsManager),倾听来信api财务报告和审定财务报表endpoint动作和流出实时运行状态有效载荷直接返回客户端. - 双出行矢量: 线速原生地,预构造的HTTP有效载荷即时,或动态地构建自定义多步骤的出行集成,通过解决运行时元数据与持久性层.
- 密码签名和 JWT 管弦乐: 特性 原生,低纬度的钩子生成 JSON Web Tokens(
$jwt使用HMAC-SHA256,同时进行定时攻击安全网络标记验证(verifySignature) (中文(简体) ). - 封存 AST 运行时 sandbox : 具有硬化的公用基质,包含有沙箱的全球物体(
JSON, (中文(简体) ),Array, (中文(简体) ),Math)和帮助方法(如 Base64 编码/解码和 URL 编码器),安全地将计算包裹在全球范围之外. - 本地边缘流检查 : 自动检查主动服务器响应缓冲器, 无法返回干净的 200 OK 只有当宏管道没有强制完成或关闭流时才确定 .
动态操作沙盒
引擎使用预定义的沙盒层来评价标准属性和自定义功能变量. 这使得配置配置配置可以安全地从苍蝇上取出字段.
| 核心运算符范围 | 提取出源值 |
|---|---|
$data | 从主动输入执行有效载荷中提取标准关键参数(data) (中文(简体) ). |
$event | 解析通过活性 Webhook 流传输的 JSON 原始输入参数 . |
$actions | 从之前的大型管线链路展出了一系列历史执行文物. |
$request 编号 : $header | HTTP 下方的曝光请求属性,方法和入网参数. |
$jwt | 触发一个活动加密签名循环,从属性中创建安全的 JWT 令牌 . |
安装
npm install @cocreate/api
使用量
API引擎消耗有两种方式. 在客户端上,集成完全以HTML5属性声明或通过JavaScript API驱动. 在服务器上,网关会解析证书,评价配置,并实现出站请求.
客户端使用: HTML5 属性
客户端不需要提供商特定代码. 在集装箱上宣布供应商登记,每个含有供应商属性的元素都会为外出有效载荷提供场或从反应中接收场.
宣布提供者
<form api="stripe"></form>
价值 api 是供货商名称。 它成为了每个字段使用的属性前缀,用于触发请求的动作名,以及发送到套接字上的有效载荷密钥. module 被接受为别名.
构建请求
每个参与元素都声明它所属的方法和所居路径.
<form api="stripe">
<input stripe="customers.create" stripe-key="email" />
<input stripe="customers.create" stripe-key="metadata.workspace" value="production" hidden />
<button actions="stripe.customers.create">Create customer</button>
</form>
单击按钮收集每个 [stripe="customers.create"] 元件的形式,读取每个值,从中组装有效载荷 stripe-key 路径 :
{
"method": "stripe.customers.create",
"stripe": {
"email": "[email protected]",
"metadata": { "workspace": "production" }
},
"status": "await"
}
键用点符号表示巢穴,用括号表示指数,所以 messages[0].content 财务报告和审定财务报表 metadata.workspace 两种决心都与嵌入物有关。 密钥结尾于 [] 添加到数组中,允许多个元素为同一集合提供条目.
收到回复
标记元素 -request="false" 被排除在外出有效载荷之外,并且仅用于从反应中获得价值.
<input
stripe="customers.create"
stripe-key="id"
stripe-request="false"
hidden />
当响应到达时,该路径的值被写入元素. 使用 -response="false" 以反向的方式:一个被派遣而永不覆写的地方。 键 {} 绘制整个提供者的有效载荷而不是单一路径.
链条结果
由于反应是用标准值管道来写出,任何绑定模块都可以对此作出反应.
<input
stripe="customers.create"
stripe-key="id"
stripe-request="false"
input-query="$document #customer-id"
input.value="$value"
hidden />
选择触发器
默认情况下,请求只在动作起火时运行. -event 将元素选择为附加触发.
<input
currency="rates.read"
currency-key="base"
currency-event="input, onload" />
可用的触发类型是 action, (中文(简体) ), input, (中文(简体) ), onload, (中文(简体) ), nodeObserver,以及 attributeObserver。 。 。 .
范围和终点
从最近的祖先收集字段 form,或者从文档中,当元素不在其中之一时,那么几个独立的集成可以在一页并存. a 内的要素 [template] 被跳过,保留模板 从活有效载荷.
一个 endpoint 属性选择已配置的路由,并 a query 属性标记请求为查询.
<input stripe="customers.create" endpoint="POST /v1/customers" hidden />
渲染出错
当网关返回出错时,客户端会将其制成匹配提供者名称的任何模板,接收 type, (中文(简体) ), method, (中文(简体) ), status,以及 message。 。 。 .
<div template="stripe-error">{{message}}</div>
客户端使用: JavaScript API
在方案方面,对于需要登记选择权、自定义处理器或必须执行的供应商,也提供同样的管道.
注册a 提供者
import api from "@cocreate/api";
api.init({
name: "stripe",
endPoints: {},
options: { socket: true }
});
通话 init() 没有参数则扫描文档 [api] 财务报告和审定财务报表 [module] 元素并注册每个供应商。 除非 options.socket 实值 false。 。 。 .
执行请求
api.request({
name: "stripe",
method: "customers.create",
form: document.querySelector("#billing"),
type: "action"
});
直接使用有效载荷
const data = await api.getData({
name: "stripe",
method: "customers.create",
form: document.querySelector("#billing")
});
await api.send({ name: "stripe", method: "customers.create", data });
send() 通过 C创造套接字传输为 provider.method 在将有效载荷映射到文件之前等待相关反应.
自定义处理器
如果注册模块定义了方法的处理器,则其 request 财务报告和审定财务报表 response 函数优先于默认的收集和绘图行为。 这是供应商需要点名序列化的扩展点,例如第三方SDK元素.
服务器使用
模块初始化
在您核心的拖曳阶段直接捆绑 API 框架 CoCreateServer 应用程序矩阵.
import apiGateway from '@cocreate/api';
import { CoCreateServer } from '@cocreate/cluster';
// Boot the primary application server instance
const serverContext = await CoCreateServer.start();
// Initialize the API engine and register WebSocket listeners
await apiGateway.init(serverContext);
直接程序化 API 执行
使用统一的集成对象执行复杂的第三方出行宏操作.
import apiGateway from '@cocreate/api';
// The method identifies the provider credentials, and the endpoint resolves the data model
const payload = {
organization_id: "64b9a32e18f21bc56789abcd",
method: "stripe",
endpoint: "POST /v1/customers",
stripe: {
email: "$data.userEmail",
metadata: {
workspace: "production"
}
},
userEmail: "[email protected]"
};
const result = await apiGateway.executeApi(payload);
属性参考
name 指经下列机构申报的提供者: api 属性,例如 stripe 或者说 openai。 。 。 .
| 属性 | 作用 |
|---|---|
api="name" | 申报并登记提供者. module 是公认的别名. |
name="method" | 标出该元素作为该方法请求和响应的参与者. |
name-key="path" | 路径元素填充或接收 。 支持点和括号符号, [] 附加到数组中,以及 {} 整个有效载荷. |
name-event="types" | 执行请求的触发类型 : action, (中文(简体) ), input, (中文(简体) ), onload, (中文(简体) ), nodeObserver, (中文(简体) ), attributeObserver默认为 action。 。 。 . |
name-request="false" | 将元素排除在外出有效载荷之外,使其仅能作出反应. |
name-response="false" | 将元素从响应映射中排除出,使其成为仅请求. |
endpoint="METHOD /route" | 设置网关解决的终点. |
query | 将请求标为查询. |
template_id="id" | 通过匹配模板而不是设置值来渲染响应. |
actions="name.method" | 触发请求并参与动作链. |
页:1
- 田地来自最近的祖先
form,回到文档. - A 内的要素
[template]不包括在有效载荷收集中. - 携带
actions属性在响应映射时被跳过,这样链条行为就不会被覆盖. - 发送请求时取消了广播,因此有效载荷从未被其他客户所响应.
如何运作
- 绑定靴子事件( E) : 期间
init(),模块会直接连接到服务器的 WebSocket 框架(wsManager),捕获来信api财务报告和审定财务报表endpoint事件信号可以引导它们到执行处理器. - 背景和防火墙初始化: 对于每次出行执行,引擎都会根据母上下文防火墙评价参数. 安全配置配置匹配已验证的套接字边框的输入连接, 锁定
organization_id财务报告和审定财务报表host配置. - 宏配置解析 : 引擎通过 CRUD 同步层发送查询,以匹配存储端点或数据库库内活性集成细节的配置文件.
- AST 矩阵处理 : 路由器通过
processOperators()。找到匹配活动变量的字符串(例如$前缀)被安全地编译于孤立的NativeSandbox环境. - 输出网络获取 : 系统构建请求配置文件, 强力设置内容标题, 映射 a
AbortController超时断路器( 15秒截取) , 并使用运行时的本地端执行请求fetch执行. - 有效载荷发送和 Webhook 调度 : Webhook 目标匹配入围边缘规则验证安全值,按顺序执行配置的工作流程,并返回结构化响应.
结构和有效载荷光谱
统一有效载荷对象Schema
API引擎依赖于平坦的,可声明的有效载荷物体通过执行管道.
| 字段元素 | 类型 | 作用 |
|---|---|---|
organization_id | String | 要求. 瞄准用于解决融合和证书问题的租户情况. |
method | String | 要求. 提供者身份(例如 "stripe") (中文(简体) ). |
endpoint | String | 要求. HTTP 用于定位所配置的终点的方法和路由( 例如) "POST /v1/customers") (中文(简体) ). |
[providerName] | Object | 提供方特定输入对象(例如 stripe),通过AST引擎处理. |
上下文引擎参数Schema
API引擎为每个请求创建执行上下文.
| 字段元素 | 类型 | 作用 |
|---|---|---|
data | Object | 向执行管道提供输入有效载荷. |
event | Object | 解析后网络hook请求体. |
actions | Array | 以往工作流程步骤累积的成果. |
organization_id | String | 租户身份标识. |
host | String | 经核实的租户宿主用于隔离. |
crud 编号 : wsManager | Object | 参考 CRUD 层和 WebSocket 管理器. |
安全执行
[尖叫声] 父母执行上下文总是会超越收到的有效载荷值,以防止跨租户进入或特权升级.
上下文沙箱
内部服务,例如: crud 财务报告和审定财务报表 wsManager 截取执行论据并自动执行经认证的租户上下文。 即使恶意配置试图覆盖租户信息,运行时间也会以已核实的执行上下文取而代之.
时间和安全签字核查
装有认证规则的入网网络hooks 使用 crypto.timingSafeEqual- 防止在签字核查期间发生时间攻击.
如何贡献
我们鼓励为所有创造图书馆捐款。 请看我们的 捐款额 发展工作流程指南和贡献指南.
如果您发现一个错误或想要请求一个特性, 请打开我们的问题 GitHub 问题 跟踪器.
关于完整的API文件、集成实例和网页浏览指南,访问:
https://cocreatejs.com/docs/api 页面存档备份,存于互联网档案馆
许可证
该软件在GNU Affero通用公共许可证版本3(AGPLv3)和商业许可证下获得双许可证.
- 开源使用 : 对于开源项目和非商业用途,该软件可在AGPLv3下提供. 许可证全文见LICENSE文件.
- 商业用途: 商业用户必须取得商业许可证。 商业许可证通过创造平台在注册API密钥时提供.
HTTP 入口
初始化的API服务曝光 http(req, res) 并行 webhook(req, res)。模块接受 POST JSON 机构,最多可达 1 MiB ,从主机名解析组织范围,并通过 server.authorize.request 处决前。 API 密钥和信封 apikey 字段被支持;冲突键被拒绝。 缺少许可或授权服务返回403。 呼叫器范围和 socket/用户身份不在此列,执行时使用无传送密钥的已消毒信封.
send() 仍然保留信任的内部呼叫和套接字发送所使用的执行 API , 而套接字的授权已经发生。 已存在的webhook AST拥有供应商签名验证.