CAMARA 位置服务紧急演示
信息
背景
- 以下是一个 技术演示文章 并且在这里 另一篇包含商业案例的一般性文章;
- 以下是 产品理念概述及更多信息;
- 以下是实时运行的演示(后端生成模拟数据和端点,未连接真实电信API,出于安全原因,仅在Orange黑客马拉松或其他要求时启用): https://camara-emergency.up.railway.app/ 可以翻译为:“https://紧急摄像头服务.up.铁路应用平台/” 或者根据具体语境简化为“紧急摄像头服务网址”。不过,这里的“up.railway.app”可能是一个特定服务或应用的域名,实际翻译时可能需要根据该服务或应用的具体名称来调整,但在此处我们只能提供一个大致的翻译方向;
栈(或堆栈)
最小化全栈演示:Node.js 后端 + React/Leaflet 前端 + MCP 桥接器 + 模拟数据生成器, 使用camara-sdk和camara-mcp库,部分工作借助了人工智能的帮助。
快速入门
- 将 .env.example 文件复制为 .env 文件,并将 USE_MOCK 设置为 true
- npm install(安装npm包)
- npm 运行 build:full 任务
- npm run start -> 打开 http://localhost:8080 翻译为中文是:“本地主机:8080 端口”。不过,通常我们不会直接这样翻译网址,而是理解为“访问本地运行在8080端口的服务器”。在实际语境中,可以根据需要灵活表达
配置
这个(或“它”) .env.example 该文件现已记录了从模拟数据切换到真实CAMARA网络API所需的所有输入信息:
- 全局CAMARA设置 (
CAMARA_BASE_URL,CAMARA_SANDBOX_CONTRACT_ID,CAMARA_OPERATOR_NAME,CAMARA_SCOPE,CAMARA_SCOPES)。 - OAuth/OpenID Connect(开放标识协议连接) 终端点和凭据(
CAMARA_OAUTH_*) 以支持与运营商沙箱进行客户端凭证交换。 - 每个产品的覆盖设置 (
CAMARA_POPULATION_DENSITY_*,CAMARA_REGION_DEVICE_COUNT_*,CAMARA_DEVICE_LOCATION_*,CAMARA_ALERTS_*) 包括使用模式标志(synchronous,asynchronous,subscription当需要使用Webhook时,提供回调端点。 - 回调默认值 (
CAMARA_CALLBACK_BASE_URL,CAMARA_CALLBACK_AUTH_HEADER) 用于向应用程序推送事件的操作员。 - Orange 开发者占位符 (
ORANGE_APPLICATION_ID,ORANGE_CLIENT_ID,ORANGE_CLIENT_SECRET,ORANGE_TOKEN_URL,ORANGE_SCOPES) 与网络API游乐场文档相匹配。
人口密度的用途 ngeohash CAMARA返回的单元格用于构建热图。在实时模式下,设备位置仍依赖于订阅;后端会在配置webhook接收器之前显示有指导性的错误信息。 离开 USE_MOCK=true 直到提供有效的沙盒凭据为止;一旦填入所有必需的变量,即设置 USE_MOCK=false 开始布设实时CAMARA(相机或监控系统)的数据流线路。 (在与真实API进行对照时,请检查所有.env沙箱变量,确保端点、凭据和其他有效配置均正确无误)。
后端端点:
- GET /api/location/device/:deviceId 翻译为中文是:“获取设备位置信息,设备ID为:deviceId”
- POST /api/density/snapshot 翻译为中文是:“发送至 /api/density/snapshot(获取密度快照)”
- GET /api/density/flow/:areaId 翻译为中文是:“获取/接口/密度/流量/:区域ID”。不过,这里的“/api/density/flow/”可能是一个具体的API路径,根据上下文,这个路径可能表示获取某个区域(由:areaId指定)的密度流量数据。所以,更自然的翻译可能是:“获取指定区域的密度流量数据(API路径:/api/density/flow/)”。但为了简洁明了,直接翻译为“获取/接口/密度/流量/:区域ID”也是可以接受的,具体取决于使用场景和读者的理解程度
- POST /api/alerts/rules 翻译为中文是:“发送到 /api/alerts/rules(创建或更新警报规则)”
- 获取 /api/alerts/rules(获取警报规则)
- 删除 /api/alerts/rules/:id(注:这里的“:id”是一个占位符,表示具体的规则ID)
- 获取 /api/alerts/stream(服务器发送事件,SSE)
- POST /api/routing/plan 翻译为中文是:“发送(POST)到/api/routing/plan 路径”。不过,在实际应用中,我们通常不会直接这样翻译API路径,而是会根据上下文解释其功能,比如:“向路由规划接口发送计划请求”。但在这里,按照您的要求,直接翻译路径为:“发送(POST)到/api/routing/plan”
- POST /api/mcp/invoke 翻译成中文是:“发送POST请求到/api/mcp/invoke接口”
AI助手 & MCP使用
camara-sdk 仓库随附了生成的(代码/文件) CAMARA MCP 服务器 因此,您可以直接为AI代理提供与演示前端相同的电信API访问权限。
- 安装服务器(无需构建步骤):
npx -y camara-mcp@latest --client=claude --tools=dynamic- 导出与您希望助手访问的产品相对应的CAMARA承载密钥或令牌交换变量。至少需要填写由您的运营商沙盒生成的通知密钥,例如:
export CAMARA_POPULATION_DENSITY_DATA_NOTIFICATIONS_API_KEY="..."
export CAMARA_REGION_DEVICE_COUNT_NOTIFICATIONS_API_KEY="..."
# add additional CAMARA_*_NOTIFICATIONS_API_KEY values as needed如果您的运营商提供的是OAuth凭据而不是静态密钥,请重用之前文档中记录的相同环境变量CAMARA_OAUTH_*, CAMARA_*_SCOPES(等)在启动服务器之前。
- 将你的MCP兼容客户端(Cursor、Claude桌面版、VS Code代理等)指向服务器。一个基本的
modelContextProtocol.json条目看起来像这样:
{
"mcpServers": {
"camara_sdk_api": {
"command": "npx",
"args": ["-y", "camara-mcp", "--client=cursor", "--tools=dynamic"],
"env": {
"CAMARA_POPULATION_DENSITY_DATA_NOTIFICATIONS_API_KEY": "..."
}
}
}
}- 在助手内部,使用
list_api_endpoints,get_api_endpoint_schema,和invoke_api_endpoint工具(在……时自动暴露)--tools=dynamic(已设置)以发现并执行CAMARA终端点。您可以使用命令行过滤器来缩小范围,例如--resource=populationdensitydata或者加载准备好的子集--tool/--no-tool旗帜。
需要远程运行MCP服务器吗?请使用以下方式启动它: npx camara-mcp --transport=http --port 3030 并配置您的客户端以针对(特定目标/设置) http://localhost:3030可选地,将相同的过滤器作为URL查询参数传递。
这个演示应该接着进行 CAMARA API设计指南 并且实施:
- 符合CAMARA规范的错误响应(状态、代码、消息)
- 使用OpenID Connect发现机制的OAuth2客户端凭证模式
- 支持x-correlator头部用于请求可追溯性
- 符合camara-sdk规范的资源命名
- 全面的安全功能(速率限制、安全头(Helmet)中间件、跨域资源共享(CORS)、数据净化)
安全特性
此应用程序包含可全面配置的、已准备好投入生产的安全功能:
- 速率限制 - 防止API滥用(默认100次请求/15分钟)
- 安全头盔头部保护装置(或“安全头盔头部护具”) - 设置安全的HTTP头部(内容安全策略CSP、HTTP严格传输安全HSTS等)
- CORS(跨源资源共享) - 可配置的跨域资源共享
- NoSQL注入防护 - 对请求数据进行消毒(或清理)
- 高压处理(HPP)保护 - 防止HTTP参数污染
- 响应压缩 - 减少带宽使用
- 身体尺寸限制 - 防止DoS攻击
- 信任代理 - 在负载均衡器后进行准确的IP检测
快速入门:
# Development (permissive)
SECURITY_RATE_LIMIT_ENABLED=false
SECURITY_CORS_ORIGINS=*
# Production (strict)
SECURITY_RATE_LIMIT_ENABLED=true
SECURITY_CORS_ORIGINS=https://yourdomain.com
SECURITY_TRUST_PROXY=true文档:
- 配置:
.env.example(见安全配置部分)
所有安全功能默认启用,并采用安全设置,同时可通过环境变量进行自定义。
