zenoh rest plugin 简单使用说明
zenoh rest plugin 提供了rest api 能力,包含了管理adminspace 以及通过get,put,delete 操作key 的能力
配置
包含了独立模式以及plugin模式,可以解决实际场景使用,基于plugin模式是一个不错的选择
- 参考配置
{
"mode": "router",
"plugins": {
"mqtt": {
"port": 1883
},
"rest": {
"http_port": 8000
}
},
"adminspace": {
"permissions": {
"read": true,
"write": true
}
}
}
使用
或者以及添加key 可以通过api 比较简单
curl -X PUT -H 'content-type:text/plain' -d 'Hello World!' http://localhost:8000/demo/example/test
curl http://localhost:8000/demo/example/test
adminspace api
实际上此处目前官方文档是有问题的,实际使用应该如下格式 http://localhost:8000/@/**
- 参考使用
信息如下
curl -X GET \
'http://localhost:8000/@/**' \
--header 'Accept: */*' \
--header 'Content-Type: application/json'
- 内部处理
zenoh/src/net/runtime/adminspace.rs 提供了基于runtime 暴露的key 信息
pub async fn start(runtime: &Runtime, version: String) {
let zid_str = runtime.state.zid.to_string();
let whatami_str = runtime.state.whatami.to_str();
let config = &mut runtime.config().lock().0;
let root_key: OwnedKeyExpr = format!("@/{zid_str}/{whatami_str}").try_into().unwrap();
let mut handlers: HashMap<_, Handler> = HashMap::new();
handlers.insert(root_key.clone(), Arc::new(local_data));
handlers.insert(
format!("@/{zid_str}/{whatami_str}/metrics")
.try_into()
.unwrap(),
Arc::new(metrics),
);
if runtime.state.whatami == WhatAmI::Router {
handlers.insert(
format!("@/{zid_str}/{whatami_str}/linkstate/routers")
.try_into()
.unwrap(),
Arc::new(routers_linkstate_data),
);
}
if runtime.state.whatami != WhatAmI::Client
&& unwrap_or_default!(config.routing().peer().mode()) == *"linkstate"
{
handlers.insert(
format!("@/{zid_str}/{whatami_str}/linkstate/peers")
.try_into()
.unwrap(),
Arc::new(peers_linkstate_data),
);
}
handlers.insert(
format!("@/{zid_str}/{whatami_str}/subscriber/**")
.try_into()
.unwrap(),
Arc::new(subscribers_data),
);
handlers.insert(
format!("@/{zid_str}/{whatami_str}/queryable/**")
.try_into()
.unwrap(),
Arc::new(queryables_data),
);
#[cfg(feature = "plugins")]
handlers.insert(
format!("@/{zid_str}/{whatami_str}/plugins/**")
.try_into()
.unwrap(),
Arc::new(plugins_data),
);
#[cfg(feature = "plugins")]
handlers.insert(
format!("@/{zid_str}/{whatami_str}/status/plugins/**")
.try_into()
.unwrap(),
Arc::new(plugins_status),
);
说明
目前zenoh 官方文档有部分并不是很一致,最好的学习是结合源码使用
参考资料
zenoh/src/net/runtime/adminspace.rs
https://zenoh.io/docs/manual/configuration/#adminspace-configuration
https://zenoh.io/docs/manual/plugin-http/