rhino二次开发:rhinocompute_7:client_calls_and_rest_patterns

04 客户端调用与 REST 模式

调用 RhinoCompute 有四种常见方式:

方式 适合场景
Python 客户端库 数据脚本、自动化、研究计算、后台任务。
JavaScript 客户端库 Web 前端、Node.js 服务、浏览器几何预览。
.NET 客户端 C# 服务、桌面工具、企业内部系统。
直接 REST 非官方语言、调试、网关服务、最小化依赖。

无论哪种方式,本质都是把几何和参数序列化为 JSON,通过 HTTP 发给 Compute,再把结果反序列化为客户端语言中的几何对象或数据结构。

服务端配置:

RHINO_COMPUTE_KEY=your-secret-key

客户端请求 header:

RhinoComputeKey: your-secret-key

本地开发可以临时不配置 API Key,但生产环境必须配置,并且不要把 key 写死在浏览器前端源码中。浏览器应用应通过自己的后端代理 Compute 请求。

安装:

pip install rhino3dm compute-rhino3d

典型结构:

import rhino3dm
import compute_rhino3d.Util
import compute_rhino3d.Mesh
 
compute_rhino3d.Util.url = "http://localhost:6500/"
compute_rhino3d.Util.authToken = "local-dev-key"
 
sphere = rhino3dm.Sphere(rhino3dm.Point3d(0, 0, 0), 12)
brep = sphere.ToBrep()
meshes = compute_rhino3d.Mesh.CreateFromBrep(brep)
 
print("mesh count:", len(meshes))

教学重点:

  • rhino3dm 在客户端构造和读写基础几何。
  • compute_rhino3d 调远程 RhinoCommon 能力。
  • 包名安装时是 compute-rhino3d,导入时是 compute_rhino3d

Node.js 安装:

npm install rhino3dm compute-rhino3d

Node.js 典型结构:

import rhino3dm from 'rhino3dm'
import RhinoCompute from 'compute-rhino3d'
 
const rhino = await rhino3dm()
 
RhinoCompute.url = 'http://localhost:6500/'
RhinoCompute.authToken = 'local-dev-key'
 
const sphere = new rhino.Sphere([0, 0, 0], 12)
const brep = sphere.toBrep()
const meshes = await RhinoCompute.Mesh.createFromBrep(brep)
 
console.log(meshes.length)

浏览器端也可以使用 rhino3dm.jscompute-rhino3d.js,但生产架构中不建议浏览器直接持有 Compute API Key。推荐:

浏览器
  -> 业务后端 API
  -> RhinoCompute

.NET 项目通常使用:

  • Rhino3dm NuGet 包。
  • Newtonsoft.Json NuGet 包。
  • RhinoCompute.cs 客户端源文件。

典型结构:

using Rhino.Geometry;
using Rhino.Compute;
 
class Program
{
    static void Main()
    {
        ComputeServer.WebAddress = "http://localhost:6500/";
        ComputeServer.ApiKey = "local-dev-key";
 
        var sphere = new Sphere(Point3d.Origin, 12);
        var brep = sphere.ToBrep();
        var meshes = MeshCompute.CreateFromBrep(brep);
 
        Console.WriteLine($"mesh count: {meshes.Length}");
    }
}

如果客户端库 API 名称与当前版本略有差异,以你项目引入的 RhinoCompute.cs 为准。

直接 REST 适合调试协议或做语言无关集成。基本模式:

POST http://server/path/to/compute/endpoint
Header:
  Content-Type: application/json
  RhinoComputeKey: your-secret-key
Body:
  JSON encoded arguments

直接 REST 的难点不在 HTTP,而在几何序列化。建议优先用官方客户端库生成请求格式,确认端点路径和 JSON 结构,再封装自己的调用层。

Grasshopper 求解通常使用 Resthopper 数据结构:

  • 定义文件:*.gh 或已经上传/缓存的定义引用。
  • 输入:DataTree 结构,按参数名和路径传值。
  • 输出:DataTree 结构,包含每个输出参数的结果集合。

这类请求非常适合:

  • 参数化模型生成。
  • 复杂业务规则封装成 Grasshopper 定义。
  • 由非 Rhino 客户端触发 Grasshopper 求解。

但它也要求定义本身可在无界面服务器中稳定运行。不要在定义中依赖人工交互、弹窗、屏幕选择或本机绝对路径。

  • 让每个请求自包含,避免依赖服务器残留状态。
  • 大文件用对象存储或预上传机制,避免把所有内容塞入单个 JSON。
  • 给每个业务请求生成 correlation id,写入外层服务日志,方便和 Compute 日志对齐。
  • 把 Compute 调用封装在业务服务内,便于统一重试、超时、限流、认证、审计。
  • 客户端超时应略大于 Compute 服务端超时,否则客户端可能先断开但服务器仍在算。
  • Python 是否能安装 rhino3dmcompute-rhino3d
  • JavaScript 是否能正确加载 rhino3dmcompute-rhino3d
  • 你是否知道 API Key 应放在 RhinoComputeKey header?
  • 你是否能说明为什么浏览器前端不应直接保存 Compute API Key?

该主题尚不存在

您访问的页面并不存在。如果允许,您可以使用创建该页面按钮来创建它。

  • rhino二次开发/rhinocompute_7/client_calls_and_rest_patterns.txt
  • 最后更改: 2026/06/05 17:03
  • 张叶安