《Synology File Station Official API》第二章-入门
#1f4970
官方英文版链接《Synology File Station Official API》
在使用 File Station API 开发自己的应用程序之前,您需要对 API 概念和 API 程序有基本的了解。
本章分以下五个部分解释如何执行和完成 API 流程:
- API 工作流程:简要介绍如何使用 File Station API
- 发出请求:详细说明如何构造 API 请求
- 解析响应:描述如何解析响应数据
- 常见错误代码:列出所有 File Station API 可能返回的所有常见错误代码
- 工作示例:提供请求文件操作的示例
API 工作流程
以下五个步骤且易于遵循的工作流程展示了如何让您的应用程序与 File Station API 交互。
步骤 1:检索 API 信息
首先,您的应用程序需要从目标 DiskStation 检索 API 信息,以了解哪些 API 可在目标 DiskStation 上使用。可以通过 /webapi/query.cgi 使用 SYNO.API.Info API 参数响应中提供的信息包含可用的 API 名称、API 方法、API 路径和 API 版本。一旦您掌握了所有信息,您的应用程序就可以向所有可用的 API 发出进一步的请求。
步骤 2:登录
为了让您的应用程序与 File Station 交互,您的应用程序需要先使用帐户和密码登录。登录过程只是使用 login 方法向 SYNO.API.Auth API 发出请求。如果成功,API 会返回一个授权的会话 ID。您应该保留它并将其传递给其他 API 请求。
第 3 步:发出 API 请求
成功登录后,您的应用程序可以开始向所有可用的 File Station API 发出请求。在下一节“发出请求”中,将给出如何形成有效的 API 请求以及如何解码响应信息的说明。
第 4 步:注销
完成上述步骤后,您的应用程序可以通过 注销 方法。
发出请求
有五个基本元素可用于构建对任何 API 的有效请求。
- API name: API请求的名字
- version: API请求的版本
- path: API的路径。可以通过请求 SYNO.API.Info 来检索路径信息
- method: API请求的方法
- _sid: 授权会话 ID。每个 API 请求都应该通过它,它是从 /webapi/auth.cgi ,通过带有 _sid 参数的 HTTP/HTTPS GET/POST 方法。否则,如果你在 id HTTP/HTTPS header的cookie值,该参数可以忽略。
请求的语法如下:
GET /webapi/<CGI_PATH>?api=<API_NAME>&version=<VERSION>&method=<METHOD>[&<PARAMS>][&_sid=<SID>]
这里 <参数> 表示请求方法的参数,是可选的。请注意,所有参数都需要转义。逗号“,”替换为斜杠“\”,斜杠“\”替换为双斜杠“\\”,因为逗号“,”用于分隔参数中的多个元素。密码相关参数不需要转义,包括 passwd 或密码参数。
请看下面的例子。如果您想在 查询 地址为 http://myds.com:port (HTTP 和 HTTPS 的默认端口分别为 5000 或 5001)对于所有可用 API 方法的列表,对应的参数是:
- API name: SYNO.API.Info
- version: 1
- path: query.cgi
- method: query
- _sid: query=all
请求将如下所示:
http://myds.com:port/webapi/query.cgi?api=SYNO.API.Info&version=1&method=query&query=all
请注意,可以通过向 SYNO.API.Info 发送请求来获取 API 的路径和支持的版本信息。 SYNO.API.Info 的位置是固定的,因此您始终可以使用 /webapi/query.cgi 请求 SYNO.API.Info 。
解析响应
所有 API 响应都以 JSON 格式编码,JSON 响应包含以下元素:
键 |
值 |
描述 |
success |
true/false |
“true”:请求成功完成; “false”:请求失败并返回错误数据。 |
data |
<JSON 样式 Object> |
数据对象包含每个方法中描述的所有响应信息。 |
error |
<JSON 样式 Object> |
数据对象包含请求失败时的错误信息。下表描述了基本元素。 |
下面描述错误元素中错误信息的格式。
键 |
值 |
描述 |
code |
错误 代码。 |
请求失败时返回错误码错误码有两种:一种是所有 API 共享的通用错误码;另一个是特定的 API 错误代码(在相应的 API 规范中描述)。 |
errors |
<JSON 样式 数组> |
该数组包含每个文件的详细错误信息。错误中的每个元素都是一个 JSON 样式的对象,其中包含错误代码和其他信息,例如文件路径或名称。 注意:当没有详细信息时,此错误元素将不会响应。 |
示例 1
在没有方法参数的情况下响应无效请求以获取 File Station 的信息。
请求:
http://myds.com:port/webapi/entryFilStation/info.cgi?api=SYNO.FileStation.Info&version=2&method=get
失败响应:
{ "success": false, "error": { "code": 101 } }
示例 2
使用非法路径响应无效请求以创建文件夹。
请求:
http://myds.com:port/webapi/FilStation/info.cgi?api=SYNO.FileStation.CreateFolder&method=create&version=1&folder_path=%2Ftest&name=%3A
失败响应:
{ "success": false, "error": { "code": 1100, "errors": [ { "code": 418, "path": "/test/:" } ] } }
示例3
响应从 File Station 获取信息的成功请求。
请求:
http://myds.com:port/webapi/FilStation/info.cgi?api=SYNO.FileStation.Info&version=2&method=get
成功响应:
{ "success": true, "data": { "is_manager": true, "hostname": "DS", "support_sharing": true, "support_virtual": "cifs,iso" } }
请注意,为了清楚地演示示例,以下部分中给出的响应示例中仅包含数据对象。
常见错误代码
以下代码是所有 WebAPI 的参数错误或登录失败的常见错误代码。
代码 |
说明 |
100 |
未知错误 |
101 |
API、方法或版本没有参数 |
102 |
请求的 API 不存在 |
103 |
请求的方法不存在 |
104 |
请求的版本不支持该功能 |
105 |
登录的会话没有权限 |
106 |
会话超时 |
107 |
会话因重复登录而中断 |
119 |
SID 未找到 |
下面列出的代码是所有 File Station API 的文件操作的常见错误代码。
代码 |
说明 |
400 |
文件操作参数无效 |
401 |
未知错误 |
402 |
系统太忙 |
403 |
无效用户执行此文件操作 |
404 |
无效组执行此文件操作 |
405 |
无效用户和组执行此文件操作 |
406 |
无法 从帐户服务器获取用户/组信息 |
407 |
不允许操作 |
408 |
没有这样的文件或目录 |
409 |
不支持的文件系统 |
410 |
无法连接基于 Internet 的文件系统(例如,CIFS) |
411 |
只读文件系统 |
412 |
文件名太长在非加密文件系统中 |
413 |
在加密文件系统中文件名太长 |
414 |
文件已存在 |
415 |
磁盘配额超出 |
416 |
设备上没有剩余空间 |
417 |
输入/输出错误 |
418 |
非法名称或路径 |
419 |
非法文件名 |
420 |
FAT 上的非法文件名文件系统 |
421 |
设备或资源繁忙 |
599 |
文件操作没有此类任务 |
工作示例
以下演示了从 DiskStation 请求文件操作的工作示例。要实施此示例,只需将示例中使用的 DiskStation 地址 (myds.com:port) 替换为您的 DiskStation 地址并将 URL 粘贴到浏览器。然后 JSON 响应将显示在响应页面中。
第 1 步:获取 API 信息
为了发出 API 请求,您应该首先 /webapi/query.cgi 以获取用于登录的 SYNO.API.Auth API 信息和用于文件操作的 FileStation API 信息.
请求:
http://myds.com:port/webapi/query.cgi?api=SYNO.API.Info&version=1&method=query&
query=SYNO.API.Auth,SYNO.FileStation
响应:
{ "data": { "SYNO.API.Auth": { "path": "auth.cgi", "minVersion": 1, "maxVersion": 3 }, "SYNO.FileStation.List": { "path": "FileStation/file_share.cgi", "minVersion": 1, "maxVersion": 1 } }, "success": true }
第 2 步:登录
在返回 SYNO.API.Auth 路径和支持的版本信息后,您可以通过请求位于 /webapi/auth.cgi 的 SYNO.API.Auth API 版本 3 来登录 FileStation 会话 。
请求:
http://myds.com:port/webapi/auth.cgi?api=SYNO.API.Auth&version=3&method=login&account=admin&
passwd=12345&session=FileStation&format=cookie
响应:
{ "data": { "sid": "ohOCjwhHhwghw" }, "success": true }
第 3 步:请求 File Station API
会话登录后,您可以继续调用 SYNO.FileStation.List 中列出共享文件夹的方法。在Step 1的响应中提供了cgi路径和版本,可以通过排除 offset 和 limit 参数来请求所有任务的列表。
请求:
http://myds.com:port/webapi/FileStation/file_share.cgi?api=SYNO.FileStation.List&version=1&method=list_share
响应:
{ "data": { "offset": 0, "shares": [ { "isdir": true, "name": "video", "path": "/video" }, { "isdir": true, "name": "photo", "path": "/photo" } ], "total": 2 }, "success": true }
列表中可以看出 File Station 中有两个共享文件夹。假设您对共享文件夹“照片”感兴趣并想了解有关它的更多详细信息,您可以向 getinfo 方法。在此请求中,您需要添加参数 additional=real_path,owner,time 用于请求详细对象并在响应中传输它们的方法。
请求:
http://myds.com:5000/webapi/FileStation/file_share.cgi?api=SYNO.FileStation.List&version=1& method=getinfo&path=%2Fphoto&additional=real_path,owner,time,perm
响应:
{ "data": { "files": [ { "additional": { "owner": { "gid": 100, "group": "users", "uid": 1024, "user": "admin" }, "real_path": "/volume1/photo", "time": { "atime": 1371630215, "crtime": 1352168821, "ctime": 1368769689, "mtime": 1368769689 } }, "isdir": true, "name": "photo", "path": "/photo" } ] }, "success": true }
第 4 步:注销
完成该过程后,您应该注销当前会话。会话将通过调用 注销 SYNO.API.Auth 中的方法。如果要注销特定会话,可以通过设置 _sid 参数。
示例:
http://myds.com:5000/webapi/auth.cgi?api=SYNO.API.Auth&version=1&method=logout&session=FileStation