Help us understand the problem. What is going on with this article?

boxのAPIのおかげで身長が3cm伸びました

More than 3 years have passed since last update.

box?

これ

クラウドストレージサービスで、APIが提供されています。

APIで何ができんの?

これ

boxでは、超最強管理者権限をもっていると管理配下のユーザーになりすますことができます。(As-User API)
これをプログラム上から使うことで、自動で
- 特定用途のフォルダを全ユーザーに作成できたり
- 不適切なファイルを勝手に削除できたり
- 不適切なコラボレータ設定を直したり
色々できちゃいます!

As-Userを利用しなくても自分の生活を豊かにするあら便利なアプリの作成は可能です。

もっと応用すると

  • S3にファイルが置かれたらバックアップをbox上に保存する
  • Slackに投稿されたファイルをboxにおく(ファイルの有効期限設定してる場合とかに有効/Slackが漏れても画像とかの面に関しては安心)

ちなみに僕はこれで権限のないユーザでも公開アップロード専用Webページと管理画面を作成しました。
めっっっっっっちゃ便利でセキュアなのでだいぶ有益でした。そのうち公開します。

どうやって開発するの?

公式のSDKが提供されています。
先の公開アップロード専用Webページは、公式SDKとAPIを使って実現してます。

GitHub

boxの開発者みたいなロールを管理者から付与されると、左ペインに 開発者コンソール のリンクがでてきます。
そのリンクから各種アプリ設定を行い、AccessKey/SecretKeyを作成することで独自のアプリの作成が開始できます。

ただ注意点があって、上記SDKはNode.js用なので、webアプリでは使えません。
webから使う場合は、ワンタイムキーを都度発行する必要があり超冗長なコードになります。

なので、以下のようなPromiseを返却する なんかそれっぽい moduleつくっちゃった方が楽でしょう。

token.js
import * as config from '../config';
import axios from 'axios';

axios.defaults.baseURL = config.api_uri;

export default {
    request() {
        const refreshToken = localStorage.getItem('refresh_token') || null;
        const code = localStorage.getItem('code') || null;

        let params = {
            client_id: config.client_id,
            client_secret: config.client_secret
        };

        if (refreshToken) {
            params['grant_type'] = 'refresh_token';
            params['refresh_token'] = refreshToken;
        } else {
            params['grant_type'] = 'authorization_code';
            params['code'] = code;
        }

        return axios.post("/oauth2/token", this.buildParams(params));
    },

    header(data) {
        this.save(data);
        return {
            Authorization: `Bearer ${data.access_token}`
        };
    }
}

余談

ちなみに先日、Node.jsのSDKが全体的にPromisifyされたのですごく使いやすくなりました。
docsの更新はされてないのにREADMEが更新されてて気づくのに遅れました。

before.js
client.folders.get('12345',  {fields: 'name'}, (err, data) => {
  //
});
after.js
client.folders.get('12345',  {fields: 'name'})
    .then(result => {
        //
    })
    .catch(error => {
        //
    })

よいboxライフを!

cloudpack
Amazon Web Services (AWS) の導入設計、環境構築、運用・保守をサポートするマネジドホスティングサービス
https://cloudpack.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした