Waterbutler API とは

Waterbutler は、Center for Open Science (COS) が開発したファイルストレージ抽象化レイヤーです。OSF (Open Science Framework) および GakuNin RDM で使用されており、様々なストレージプロバイダー(OSF Storage、Amazon S3、Google Drive、Dropbox など)に対して統一的なAPIでファイル操作を行うことができます。

主な機能

  • ファイルのアップロード・ダウンロード
  • ファイル/フォルダの作成・削除・移動・コピー
  • メタデータの取得

エンドポイント

  • GakuNin RDM : https://files.rdm.nii.ac.jp/v1
  • OSF : https://files.osf.io/v1

参考リンク

問題

GakuNin RDM の Waterbutler API を使用してファイルをアップロードした後、そのファイルの詳細画面に直接遷移したい場合があります。

しかし、RDM上ではプロジェクトの短縮URL(例:https://rdm.nii.ac.jp/qv3xf/)が表示されるため、アップロードしたファイルの詳細画面URLをどのように構成すればよいかわかりにくい状況でした。

Waterbutler API のレスポンス

ファイルアップロード時の Waterbutler API レスポンス例:

{
  "data": {
    "id": "osfstorage/67dacaa816000900109e1da3",
    "type": "files",
    "attributes": {
      "name": "nft-43-provenance-2025-12-29T13-08-47.zip",
      "kind": "file",
      "path": "/67dacaa816000900109e1da3"
    },
    "links": {
      "download": "https://files.rdm.nii.ac.jp/v1/resources/wzv9g/providers/osfstorage/67dacaa816000900109e1da3",
      "move": "https://files.rdm.nii.ac.jp/v1/resources/wzv9g/providers/osfstorage/67dacaa816000900109e1da3"
    }
  }
}

解決策:ファイル詳細URLの構成

ファイル詳細画面のURLは以下の形式で構成します:

https://rdm.nii.ac.jp/{nodeId}/files/{provider}/{fileId}
パラメータ説明取得方法
nodeIdプロジェクトIDアップロード時に指定した値(例:wzv9g
providerストレージプロバイダーアップロード時に指定した値(例:osfstorage
fileIdファイルIDレスポンスの data.id から抽出(osfstorage/ 以降の部分)

実装例(TypeScript)

// Waterbutler API レスポンスからファイルIDを抽出
const data = await response.json();

let fileId: string | undefined;

// data.id から抽出(形式: "osfstorage/67dacaa816000900109e1da3")
if (data.data?.id) {
  const idParts = data.data.id.split("/");
  if (idParts.length > 1) {
    fileId = idParts[idParts.length - 1];
  }
}

// ファイル詳細URLを構成
const fileDetailUrl = `https://rdm.nii.ac.jp/${nodeId}/files/${provider}/${fileId}`;
// 結果: https://rdm.nii.ac.jp/wzv9g/files/osfstorage/67dacaa816000900109e1da3

まとめ

  • 短縮URLhttps://rdm.nii.ac.jp/qv3xf/)はプロジェクトトップページ
  • ファイル詳細URL/{nodeId}/files/{provider}/{fileId} の形式で構成
  • fileId は Waterbutler API レスポンスの data.id から provider/ を除いた部分