REST APIでフォルダーとファイルを一覧表示

読み取り可能なキーでGET /api/filesを呼び出し、ワークスペースまたはフォルダー内のページを順に取得します。アクセス、ロック、非表示コンテンツ、スコープに関する拒否への対処も説明します。

最終確認日

スクリーンショットは英語版の画面です。

GET https://api.dosya.dev/api/filesを使って、ワークスペース内の1か所で表示可能なフォルダーとファイルを一覧表示します。リクエストはメタデータ、パンくずリスト、権限、ファイル一覧のページ情報を返します。ファイルの内容は返さず、共有リンクも作成しません。

認証情報とアクセスの要件

プロトコルでREST APIを許可した読み取り専用またはフルアクセスのAPIキーを作成してください。連携から他のワークスペースを列挙させない場合は、対象のワークスペースに固定してください。フォルダーアンカー付きの通常のAPIキーはRESTで拒否されるため、このエンドポイントではフォルダーアンカーを設定せずワークスペースを固定してください。

キーは、そのキーを作成したアカウントのアクセス範囲を制限します。アカウントは引き続きワークスペースのメンバーである必要があり、そのロールにはaccess_filesが必要です。一覧を返す前に、フォルダーのアクセス制限、非表示フォルダーのルール、完全ロック、ワークスペースのメンバーシップが確認されます。

アップロードのみキーでは、このGETエンドポイントを呼び出せません。拒否時には対象の操作が明示されます:This credential's scope is 'upload' and cannot perform GET /api/files。

ワークスペースIDと読み取り可能なキーから、ページ分割されたメタデータとアクセス範囲の確認までのRESTファイル一覧取得の流れ。
既知のワークスペースのルートを一覧表示し、ページを順に取得してから、制限されたコンテンツや非表示のコンテンツが応答に含まれないことを確認してください。スクリーンショットを原寸で開く。

手順

シークレットを非公開で設定し、GET /api/workspacesから返されたワークスペースIDを使用してください:

read -r -s -p 'API key: ' DOSYA_API_KEY
printf '\n'
export DOSYA_API_KEY
export DOSYA_WORKSPACE_ID='ws_REPLACE_ME'

curl --fail-with-body --silent --show-error --get \
  'https://api.dosya.dev/api/files' \
  -H "Authorization: Bearer $DOSYA_API_KEY" \
  --data-urlencode "workspace_id=$DOSYA_WORKSPACE_ID" \
  --data-urlencode 'page=1' \
  --data-urlencode 'per_page=100' \
  --data-urlencode 'sort=name' \
  --data-urlencode 'dir=asc' \
  -o files-page-1.json

python3 -m json.tool files-page-1.json

workspace_idは必須です。省略するとworkspace_id is requiredが返されます。folder_idを指定しない場合、このルートはワークスペースのルートを一覧表示します。メンバーのアカウントがフォルダーに制限されている場合は、その制限されたルートを一覧表示します。

成功時のJSONには次が含まれます:

  • folders:現在の場所にある子フォルダーのメタデータ。
  • files:現在のページのファイルメタデータ。後続のファイルルートで使うIDを含みます。
  • breadcrumbs:サブフォルダーを一覧表示する場合の、ルートから現在のフォルダーまでの名前。
  • workspace_idと特定されたfolder_id。
  • 呼び出し元の現在のロールとフォルダーの状態を示すcan_lock、can_hide、folder_view_only。
  • pagination.page、per_page、total_files、total_pages。

フォルダーとファイルは別々の配列です。total_filesとtotal_pagesはファイルのページを表し、子フォルダーの数ではありません。

RESTでフォルダーとファイルのメタデータを一覧表示するのに適したRead onlyを選択できるdosyaのAPIキー権限選択画面。
一覧表示には**読み取り専用**キーで十分です。同じ認証情報によるコンテンツのアップロード、移動、共有、削除も防げます。スクリーンショットを原寸で開く。

サブフォルダーの一覧表示と名前による絞り込み

既知のフォルダーIDを渡して、そのフォルダーの直下の項目を一覧表示します:

DOSYA_FOLDER_ID='fld_REPLACE_ME'
curl --fail-with-body --silent --show-error --get \
  'https://api.dosya.dev/api/files' \
  -H "Authorization: Bearer $DOSYA_API_KEY" \
  --data-urlencode "workspace_id=$DOSYA_WORKSPACE_ID" \
  --data-urlencode "folder_id=$DOSYA_FOLDER_ID" \
  --data-urlencode 'q=invoice' \
  --data-urlencode 'page=1' \
  --data-urlencode 'per_page=100'

qは前後の空白が取り除かれ、大文字と小文字を区別せず名前と照合されます。特殊なワイルドカード文字は、生のSQLパターンではなく検索テキストとして扱われます。フォルダーに制限されたメンバーが、許可されたサブツリーの外にあるフォルダーを明示的に指定すると、HTTP 403とThis folder is outside the folder you're confined toが返されます。

対応する並べ替えキーにはname、size、created、modified、taken、type、extension、version、uploader、region、origin、shares、commentsがあります。キーを単独で指定し、dir=ascまたはdir=descを併用してください。newest、oldest、largest、smallestなどの従来の値も受け付けます。不明な並べ替え入力は新しい順にフォールバックします。

ファイルのすべてのページを取得

標準の1ページあたりの件数は100です。per_pageは10–500の範囲に収められ、pageは1から始まります。返されたページがpagination.total_pagesに達するまで続けてください:

import json, os, urllib.parse, urllib.request

base = 'https://api.dosya.dev/api/files'
workspace = os.environ['DOSYA_WORKSPACE_ID']
key = os.environ['DOSYA_API_KEY']
page = 1

while True:
    query = urllib.parse.urlencode({
        'workspace_id': workspace,
        'page': page,
        'per_page': 500,
        'sort': 'name',
        'dir': 'asc',
    })
    req = urllib.request.Request(base + '?' + query,
        headers={'Authorization': 'Bearer ' + key})
    with urllib.request.urlopen(req) as response:
        body = json.load(response)
    for item in body['files']:
        print(item['id'], item['name'], item['size_bytes'])
    if page >= body['pagination']['total_pages']:
        break
    page += 1

オフセット方式では、ページを取得している間にファイルが変化する場合があります。安定したエクスポートのため、実行中は名前変更、アップロード、削除を同時に行わず、収集した行をファイルIDで重複排除してください。

アクセスとロックの応答を解釈

応答意味と次の操作
401、Not authenticatedまたは無効なキーを示すテキスト完全なBearerトークンを設定し直し、有効期限や取り消しを確認してください。
403、This API key is not permitted to use the api surfaceプロトコルの選択にREST APIを含むキーを作成してください。
403、Not a member of this workspaceワークスペースIDを確認し、メンバーシップを復元してください。キーでメンバーシップを付与することはできません。
403、You don't have access to the files page現在のロールにaccess_filesがありません。ワークスペースの管理者に変更を依頼してください。
403とerror: "folder_locked"、lock_mode: "full_lock"連携がロックされたフォルダーに対応している場合は、許可された手順でフォルダーのロックを解除し、現在のutトークンを渡してください。
404、Folder not foundこのリクエスト元にとってフォルダーは存在しません。非表示フォルダーや非表示の親の配下にあるフォルダーも含まれます。この応答から非表示コンテンツを推測しないでください。

呼び出し元に非表示コンテンツを管理する権限がない場合、非表示のファイルとフォルダーは通常の結果から除外されます。view_onlyフォルダーは引き続き一覧表示でき、クライアントがダウンロード操作を抑制できるよう、応答にfolder_view_only: trueが設定されます。

期待される結果

各リクエストはHTTP 200とともに、指定した場所で認証情報の持ち主が表示できるフォルダーとファイルだけを返します。pagination.total_pagesに従ってページを取得すると、ファイルの内容をダウンロードしたりワークスペースを変更したりせずに、アクセス可能なファイル一式を取得できます。

関連ガイド

この記事は役に立ちましたか?

評価の結果を読み込んでいます…

投票すると、回答を変更できるように、必要な投票用Cookieが最長180日間保存されます。

質問と回答

このガイドの手順について質問できます。質問は確認後に公開されます。

公開の質問には、アカウントの詳細、認証情報、非公開ファイルを含めないでください。これらについては 非公開サポート をご利用ください。

質問を読み込んでいます…

    dosyaアカウントにサインインすると、質問を投稿できます。

    やり直す前に結果を確認

    操作をもう一度確認する必要があるときは、次の共通の確認事項をご利用ください。