如何将Web应用与Fablo Rest API集成?缺失API URL该如何处理?
如何将Web应用与Fablo Rest API集成
1. 确定Fablo Rest API的访问URL
Fablo Rest API默认监听端口为3000,本地部署时基础URL通常为http://localhost:3000;如果部署在远程服务器,则替换为服务器公网IP,比如http://192.168.1.100:3000。若不确定具体地址,可通过以下方式验证:
- 查看Fablo Rest API的启动日志,日志中会明确显示服务监听的
host:port - 检查Fablo Rest API的
.env配置文件,其中PORT字段定义了服务端口 - 若用Docker部署,执行
docker ps找到fablo-rest容器,查看端口映射(如0.0.0.0:3000->3000/tcp),映射的外部端口即为访问端口
2. 生成并配置授权令牌
调用API前必须携带有效的授权令牌,步骤如下:
- 通过POST请求获取令牌(示例命令,参数需匹配你的Fablo用户配置):
curl -X POST http://localhost:3000/api/auth/login \ -H "Content-Type: application/json" \ -d '{"username": "admin", "password": "adminpw"}' - 保存返回结果中的
accessToken字段,后续所有API请求都需要在请求头中携带该令牌:const authToken = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."; // 替换为实际令牌
3. 使用Fetch API与链码交互
以下是Web应用中调用Fablo Rest API的实际示例,以asset-transfer-basic链码的查询和交易操作为例:
示例1:查询所有资产
async function fetchAllAssets() { const apiBaseUrl = "http://localhost:3000"; const channelName = "mychannel"; const chaincodeName = "asset-transfer-basic"; try { const response = await fetch( `${apiBaseUrl}/api/channels/${channelName}/chaincodes/${chaincodeName}/queries/GetAllAssets`, { method: "GET", headers: { "Authorization": `Bearer ${authToken}`, "Content-Type": "application/json" } } ); if (!response.ok) throw new Error(`请求失败: ${response.status}`); const assets = await response.json(); console.log("资产列表:", assets); // 在这里将资产数据渲染到页面 } catch (error) { console.error("查询资产出错:", error); // 处理错误提示,比如显示给用户 } }
示例2:创建新资产
async function createNewAsset(assetData) { const apiBaseUrl = "http://localhost:3000"; const channelName = "mychannel"; const chaincodeName = "asset-transfer-basic"; try { const response = await fetch( `${apiBaseUrl}/api/channels/${channelName}/chaincodes/${chaincodeName}/transactions/CreateAsset`, { method: "POST", headers: { "Authorization": `Bearer ${authToken}`, "Content-Type": "application/json" }, body: JSON.stringify({ args: [ assetData.id, assetData.color, assetData.size.toString(), assetData.owner, assetData.appraisedValue.toString() ] }) } ); if (!response.ok) throw new Error(`创建失败: ${response.status}`); const result = await response.json(); console.log("资产创建成功:", result); // 创建成功后刷新资产列表或提示用户 } catch (error) { console.error("创建资产出错:", error); } }
4. 日常维护要点
- 令牌过期处理:由于授权令牌有有效期,建议在Web应用中添加令牌过期检测逻辑,当请求返回401未授权时,自动触发重新登录流程获取新令牌
- 网络状态管理:使用
sudo ./fablo [down|start|stop|up|prune|reset]命令维护Fabric网络,确保API能正常连接到链码服务
内容的提问来源于stack exchange,提问作者Bushra
相关产品推荐
相关产品推荐

