@bielu/scalar-grpc (英语)
互动 gRPC 控制台 该插件 斯卡尔 API 参考.
它读到 grpc (或 x-grpc从您的 AsyncAPI 文档中绑定, 并让一个面板可以选择
a 服务,编辑从有效载荷计划预填的JSON请求,并引用unary和
服务器流方法实时——结束 gRPC-网络 (浏览器不能说本地gRPC). 客户
双向分流方法作为文件提供,其中“不得从
浏览器"徽章.
因为AsyncAPI 有效载荷计划是 JSON Schema(无原生生地编号),所以控制台编码
从 .NET 软件包的相伴中取出真实的 protobuf 描述符的有线信息
{assetsPath}/descriptors 终点( 序列化 ) FileDescriptorSet),使用
@bufbuild/protobuf + 键 @connectrpc/connect-web ——完全动态,浏览器中没有代码.
这套货包来自、并被其消耗
Bielu.AspNetCore.AsyncApi.Scalar.Grpc
.NET 软件包(它嵌入了已建的捆绑),但它也单独被发布到 npm , 这样它就可以
从CDN装入或用手捆绑.
服务器先决条件
目标 ASP.NET 核心应用必须:
- 启用 gRPC- Web :
app.UseGrpcWeb(new GrpcWebOptions { DefaultEnabled = true })(包装)Grpc.AspNetCore.Web),以及 - 服务描述式终点 :
app.MapScalarGrpcAssets()(包装)Bielu.AspNetCore.AsyncApi.Scalar.Grpc) (中文(简体) ).
当页面和 gRPC 服务器在不同的源头上时, CORS 必须允许 gRPC- Web 响应
标题 : grpc-status 财务报告和审定财务报表 grpc-message 需要暴露
(单位:千美元)policy.WithExposedHeaders("Grpc-Status", "Grpc-Message", "Grpc-Encoding", "Grpc-Accept-Encoding")) (中文(简体) ).
独立使用
<div id="app"></div>
<script src="https://cdn.jsdelivr.net/npm/@bielu/scalar-grpc"></script>
<script>
window.__BIELU_SCALAR_GRPC__ = {
documents: [{ name: 'grpc', url: '/asyncapi/grpc.json' }],
}
Scalar.createApiReference('#app', {
sources: [{ url: '/asyncapi/grpc.json' }],
})
</script>
GRPC文件可通过全球 window.__BIELU_SCALAR_GRPC__ 或内置
在斯卡拉尔配置为 config.grpc。 。 。 .
程序用途
import { createGrpcPlugin } from '@bielu/scalar-grpc'
Scalar.createApiReference('#app', {
sources: [{ url: '/asyncapi/grpc.json' }],
plugins: [createGrpcPlugin()],
})
认证
控制台取取Scalar认证面板(Scalar 2.16.12)中输入的证书
并把它们映射到 gRPC-Web 调用元数据:头部 API 密钥, Authorization: Bearer … 和 HTTP 软件
基本所有直接映射(gRPC-Web元数据为plain HTTP头). 额外的按调用元数据
输入控制台的元数据编辑器.
大楼
npm install
npm run build # → dist/plugin.js + dist/plugin.mjs + dist/scalar-plugin.mjs + dist/standalone.js + dist/types
建筑内含私人 @bielu/scalar-core 工作空间软件包(文档发现, 认证)
state, schema example, Scalar boiltrap)——参见该套件的README用于共享合同.
4项建设产出,有4个不同的合同——不能互换:
| 产出 | 合同 | 用于 |
|---|---|---|
dist/plugin.js | IIFE; 通过钩子安装 window.Scalar.createApiReference | MapScalarGrpcAssets()在斯卡拉自己的包旁边 |
dist/plugin.mjs | ES 模块库条目; 已命名导出( E)createGrpcPlugin)),还自备自备 | 消费者 import 从此软件包 |
dist/scalar-plugin.mjs | ES模块; 默认导出为插件,没有登记本身 | 斯卡尔的 pluginUrls 选项——Aspire包如何将控制台添加到库存容器中 |
dist/standalone.js | Scalar 预建的浏览器与附加插件捆绑 | 其它没有加载斯卡拉的页面; 替换 Scalar自己的捆绑 |
dist/scalar-plugin.mjs 也读它自己的 import.meta.url 找到原生的描述符
结束点,因为 document.currentScript 总是 null 在一个ES模块.