目录

04 客户端调用与 REST 模式

调用方式总览

调用 RhinoCompute 有四种常见方式:

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

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

API Key 规则

服务端配置:

RHINO_COMPUTE_KEY=your-secret-key

客户端请求 header:

RhinoComputeKey: your-secret-key

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

Python 调用

安装:

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))

教学重点:

JavaScript 调用

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 调用

.NET 项目通常使用:

典型结构:

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 调用

直接 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 REST 模式

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

这类请求非常适合:

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

请求设计建议

本章检查点

参考资料