Synology NAS API 免费获得总计 space

Synology NAS API get free and total space

我正在尝试调用 Synology NAS 的 API 来检索免费 space 和总共 space 可用的信息。

我的登录有效,我正在获取我的令牌,使用该令牌的请求显示为“成功”。

但是,当我尝试调用 list_share 方法时,additional 值设置为 volume_status,根据 API 的文档应该给我所需的数据,我得到的是:

{
    "data": {
        "offset": 0,
        "shares": [],
        "total": 0
    },
    "success": true
}

我提出的要求是:

https://NAME:5001/webapi/entry.cgi?api=SYNO.FileStation.List&version=2&method=list_share&additional=volume_status&_sid=TOKEN

我是不是提出了错误的请求?我是否需要将方法从 list_share 更改为 list? 我是否传递了错误的 additional 值?

我正在使用的文档可以在谷歌搜索“Synology NAS rest API”时找到。我为 PDF here.

插入了直接下载 link

根据链接文档,附加参数需要额外的括号和引号,如下所示:

https://NAME:5001/webapi/entry.cgi?api=SYNO.FileStation.List&version=2&method=list_share&additional=["volume_status"]&_sid=TOKEN

根据您使用的库,您可能需要对括号和引号进行编码,但大多数库都应该为您做这件事:)


为了得出这个结论,我是这样做的:

在链接文档中,我找到了有关 list_share 的部分和提供的示例:

GET /webapi/entry.cgi?api=SYNO.FileStation.List&version=2&method=list_share& additional=%5B%22real_path%22%2C%22owner%2Ctime%22%5D

这是完全不可读的,因为 url 已经编码,但是打开浏览器控制台和 运行

decodeURIComponent("/webapi/entry.cgi?api=SYNO.FileStation.List&version=2&method=list_share&additional=%5B%22real_path%22%2C%22owner%2Ctime%22%5D")

引导我阅读 url:

/webapi/entry.cgi?api=SYNO.FileStation.List&version=2&method=list_share&additional=["real_path","owner,time"]


这是一个例子,如何登录,打印数据,再次注销:

const http = require("http");

// Helper function to get JSON from an endpoint
function getJson(url) {
  return new Promise((resolve, reject) => {
    http.get(url, (res) => {
      res.setEncoding("utf8");
      let rawData = "";
      res.on("data", (chunk) => {
        rawData += chunk;
      });
      res.on("end", () => {
        try {
          const parsedData = JSON.parse(rawData);
          resolve(parsedData);
        } catch (e) {
          reject(e);
        }
      });
    });
  });
}

(async () => {
  const host = "synology:5000";
  const user = "userHere";
  const password = "passwordHere";

  // login
  const {
    data: { sid },
  } = await getJson(
    `http://${host}/webapi/query.cgi?api=SYNO.API.Auth&method=login&version=3&account=${user}&passwd=${password}&session=test&format=sid`
  );

  const url = `http://${host}/webapi/query.cgi?api=SYNO.FileStation.List&method=list_share&version=2&_sid=${sid}&additional=["volume_status"]`;
  const { data } = await getJson(url);

  data.shares.forEach((share) => {
    console.log(share.name, "-", share.path);
    console.log(share.additional.volume_status);
  });

  //logout
  await getJson(
    `http://${host}/webapi/query.cgi?api=SYNO.API.Auth&method=logout&version=3&session=test`
  );
})();