#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