群晖API开发初探

群晖的DSM系统功能强大,又是私有化部署,是非常好的家庭共享存储或小型公司的小型存储方案。群晖的套件众多,比如PhotoStation、Moments、FileStation、DownloadStation、CloudSync、NoteStation等有很多的教程,但其实DSM系统的API功能也非常强大,这里初探一下使用方法。

事实上,群晖几乎各个套件都有完整的API的支持,但因为文档不够完整,参考资料也非常少,所以使用非常不便。参考官网开发专区 的FileStation API文档,可以了解到API开发的流程:

  • 获取API 信息:

    import json
    import requests
    ret = requests.get('http://myds.com:port/webapi/query.cgi?api=SYNO.API.Info&version=1&method=query&query=all')
    ret = json.loads(ret)
    if ret['success']:
      print(ret['data'])
    

    query参数如果是all,可以获取所有的API信息,也可以指定查询特定的一批API。比如:

    #注意NoteStation后的'.',可以查出NoteStation下所有的API
    query_str = 'SYNO.API.Auth,SYNO.NoteStation.'
    
  • 用户登录

    import json
    import requests
    ret = requests.get('http://myds.com:port/webapi/auth.cgi?api=SYNO.API.Auth&version=3&method=login&account=admin&passwd=12345&session=FileStation&format=sid')
    ret = json.loads(ret)
    if ret['success']:
      print(ret['data'])
    

    如果登录成功,可以获得sid,在后续的所有API调用上一定要附带参数_sid。

  • 调用API

    import json
    import requests
    ret = requests.get('http://myds.com:portGET /webapi/entry.cgi?api=SYNO.NoteStation.Note&method=get&version=3&object_id=NOTE_ID&_sid=SID')
    ret = json.loads(ret)
    if ret['success']:
      print(ret['data'])
    

    这里显示的是NoteStation获取某一篇笔记详细信息的API,由于NoteStation没有API文档,只能通过浏览器的请求来分析得到,比如创建笔记的参数:

    POST /webapi/entry.cgi HTTP/1.1
      
    commit_msg: {"device":"desktop","listable":false}
    title: "无标题便签"
    parent_id: "1001_ABCDEFGHIJKLMNPQRSTUVW"
    encrypt: false
    api: SYNO.NoteStation.Note
    method: create
    version: 3
      
    
  • 用户登出

    import json
    import requests
    ret = requests.get('http://myds.com:port/webapi/auth.cgi?api=SYNO.API.Auth&version=1&method=logout&session=FileStation')
    ret = json.loads(ret)
    if ret['success']:
      print('Logout OK.')
    

经过一番努力,顺利利用API获取、创建NoteStation的文章,可以方便的扩展功能了。在使用API的过程中,也发现了很多奇怪的问题,比如创建Note时,Title不能为纯数字,会导致API返回失败,群晖加油,希望可以对开发者提供更完整的社区支持!