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
まとめ
- 短縮URL (
https://rdm.nii.ac.jp/qv3xf/)はプロジェクトトップページ - ファイル詳細URL は
/{nodeId}/files/{provider}/{fileId}の形式で構成 fileIdは Waterbutler API レスポンスのdata.idからprovider/を除いた部分