序章

BaasBoxは、データベースサーバーとアプリケーションサーバーを組み合わせて機能するアプリケーションです。 箱から出してすぐに、BaasBoxは、ユーザーのサインアップ、ユーザー管理、役割管理、コンテンツ管理、ファイル管理、およびバックアップ付きのデータベース管理を提供します。 この機能はすべて標準のHTTPRESTAPIを介して公開されているため、Webおよびモバイルアプリケーションの開発者は、BaasBoxをバックエンドとして使用してデータを保存できます。 開発者は、アプリケーションの他の部分で使用されるBaasBoxに基づいてマイクロサービスを作成することもできます。

この記事では、BaasBoxのインストール、ユーザーの作成、管理コンソールの操作、および単純なアプリケーションバックエンドを作成する際のRESTAPIの調査について説明します。

前提条件

  • Ubuntu14.04を実行しているドロップレットがあります
  • 管理者権限を持つroot以外のユーザーとしてサーバーにログインしています。 これを設定するには、チュートリアル Ubuntu14.04の初期サーバー設定ガイドを参照してください。
  • Oracleから公式のJava8JREをインストールしました。 このチュートリアルでは、その方法について説明しています。

ステップ1—BaasBoxのインストールと実行

BaasBoxをインストールするには、公式WebサイトからBaasBoxの最新の安定バージョンをダウンロードします。 これは、wgetコマンドを使用して次のように実行できます。

  1. wget http://www.baasbox.com/download/baasbox-stable.zip

unzipコマンドを使用して、ダウンロードしたzipファイルからBaasBoxを抽出します。 unzipがない場合は、次のコマンドを使用してインストールします。

  1. sudo apt-get install unzip

次に、zipファイルの内容を抽出します。

  1. unzip baasbox-stable.zip

このコマンドは、zipファイルの内容をbaasbox-X.Y.Zという名前のディレクトリに抽出します。ここで、X.Y.Zは最新バージョンになります(例:0.9.5)。 新しく作成したディレクトリを入力します。

  1. cd baasbox-X.Y.Z

このディレクトリには、BaasBoxを起動するために実行する必要があるstartという名前のファイルが含まれています。 そのためには、まず次のコマンドを使用して実行可能ファイルにする必要があります。

  1. chmod +x ./start

次に、BaasBoxを起動するには、次のコマンドを実行します。

  1. ./start

いくつかの出力が表示され、その終わりは次のようになります。

Output
2016-06-28 14:32:14,554 - [info] - BaasBox is Ready. 2016-06-28 14:32:14,558 - [info] - Application started (Prod) 2016-06-28 14:32:14,733 - [info] - Listening for HTTP on /0:0:0:0:0:0:0:0:9000 2016-06-28 14:32:15,261 - [info] - Session Cleaner: started 2016-06-28 14:32:15,263 - [info] - Session cleaner: tokens: 0 - removed: 0 2016-06-28 14:32:15,263 - [info] - Session cleaner: finished

上記の出力で強調表示されている部分は、BaasBoxが現在実行中であり、マシンのポート9000でアクセスできることを示しています。 デフォルトのBaasBox構成は、すべてのネットワークインターフェイスのこのポートでリッスンします。 これは、BaasBoxが次の場所からアクセスできることを意味します。

  • インストールされているサーバーからのhttp://localhost:9000およびhttp://127.0.0.1:9000(またはSSHトンネル経由)
  • サーバーが接続されている内部ネットワークからのhttp://your_internal_server_ip:9000(内部ネットワーク上にある場合)
  • your_ip_addressが公的にアクセス可能なIPアドレスである場合、インターネットからのhttp://your_ip_address:9000

必要に応じて、BaasBoxに特定のネットワークインターフェイスと別のポートでリッスンさせることができます。 これを行うには、次のコマンドを使用します。

  1. ./start -Dhttp.port=target_port -Dhttp.address=target_interface

ブラウザでhttp://your_ip_address:9000/consoleにアクセスして、BaasBox管理コンソールにアクセスすると、次の図のようなインターフェイスが表示されます。

BaasBox Admin Console

BaasBoxを実行した状態で、アプリケーションと一部のユーザーをセットアップしましょう。

ステップ2—BaasBoxを使用してアプリケーションを作成する

この記事では、次のような単純なTodoリストマネージャーを作成します。

  • ユーザーがサインアップできるようにする
  • ユーザーにログインを許可する
  • ユーザーが複数のToDoリストを作成できるようにする
  • ユーザーが自分のToDoリストを取得できるようにする
  • ユーザーが自分のToDoリストを変更できるようにする
  • ユーザーが自分のToDoリストを削除できるようにする
  • ユーザーが自分のToDoリストを別のユーザーと共有できるようにする

フォローする際は、次の点に注意してください。

  • ユーザー名user1user2の2人のユーザーを作成します
  • これらのユーザーのパスワードは、user1_passwordおよびuser2_passwordと呼ばれます。
  • これらのユーザーのセッションIDは、user1_session_idおよびuser2_session_idと呼ばれます。

BAasBoxはRESTAPIを介して管理できますが、手順2で見たように、http://your_ip_address:9000/consoleにある管理コンソールを使用して管理する方が便利な場合があります。 ブラウザでそのリンクにアクセスしてください。 初めて使用するため、デフォルトのクレデンシャルでログインします。

  • デフォルトのユーザー名:admin
  • デフォルトのパスワード:admin
  • デフォルトのアプリコード:1234567890

BaasBox Admin Console Login

ログインすると、BaasBoxダッシュボードが表示されます。

BaasBox Dashboard

管理コンソールを使用して、アプリケーションのユーザーを作成しましょう。

ステップ3—ユーザーの作成

ユーザー管理は、BaasBoxの最も便利な機能の1つです。 BaasBoxには、プライベートで編集できない組み込みユーザーがいます。 これには、管理コンソールへのログイン時に使用するadminユーザーが含まれます。

BaasBoxを使用すると、ロールを定義してユーザーに割り当て、きめ細かいアクセス制御を実装することもできます。 デフォルトでは、BaasBoxには次の3つの役割があります。

  • administrator-この役割には完全な無制限のアクセス権があります
  • backoffice-このロールは、登録ユーザーによって作成されたコンテンツへのアクセスを許可します
  • registered-これは新規登録ユーザーのデフォルトの役割です

これらの事前構成された役割に加えて、独自の役割を追加できます。 新しいロールが作成されると、上記のregisteredロールと同じ権限が付与されます。

管理コンソールまたはRESTAPIを使用して、BaasBoxでユーザーを作成できます。 通常、REST APIを使用して、アプリのユーザー登録プロセスなどを通じて、プログラムでユーザーを作成します。

管理コンソールからユーザーを追加するときに、ユーザーのカスタムロールを設定できます。 ただし、組み込みのREST APIを使用してサインアップする場合、新しく作成されたユーザーにはregisteredロールが割り当てられます。

BaasBoxの管理コンソールから新しいユーザーを作成するには、管理コンソールでユーザー>ユーザーメニューを開き、新しいユーザーボタンをクリックします。

BaasBox Admin Console - New User

これにより、作成しているユーザーの詳細を入力できるフォームが開きます。

BaasBox Admin Console - New User

ユーザー名パスワードパスワードの再入力およびロールフィールドは必須ですが、他のすべてのフィールドはオプションです。 必要に応じて、このフォームを下にスクロールして、追加の詳細を入力できることに注意してください。

このユーザーのユーザー名をuser1に設定します。 任意の役割を選択できますが、最も一般的に使用される役割はregisteredです。 すべての詳細を入力したら、変更を保存ボタンをクリックして、ユーザー作成プロセスを完了します。

次のセクションでは、RESTAPIを使用してユーザーを作成します。 次に、アプリケーションのコンテンツの場所を構成しましょう。

ステップ4—コレクションの作成

BaasBoxは、コンテンツをcollectionsに編成します。これは、MongoDBなどのNoSQLデータベースによって提供されるコレクションに似ています。 コレクションは、同じタイプのdocumentsを保持します。 SQLデータベースに精通しているユーザーは、collectiontableとほぼ同じであると考えることができます。 同様に、documentrecordに似ています。

コレクションは管理者のみが作成できます。 コレクションを作成する最も一般的な方法は管理コンソールからですが、RESTAPIを使用して作成することもできます。 このセクションでは、管理コンソールからコレクションを作成する方法を見ていきます。

すべてのコンテンツ管理機能は、CollectionsおよびDocumentsメニューのDATAセクションの管理コンソールで使用できます。

DATA>コレクションメニューを開きます。 アプリケーション内の現在のすべてのコレクションを一覧表示するページが表示されます。

BaasBox Admin Console - Collections

新しいコレクションを作成するには、新しいコレクションボタンをクリックします。 これにより、コレクション名の入力を求めるフォームが表示されます。

BaasBox Admin Console - New Collection

コレクションの名前としてtodosと入力し、 [変更を保存]をクリックして、コレクションの作成プロセスを完了します。 これで、アプリケーションのユーザーは、REST APIを使用して、このコレクションとこのコレクション内のドキュメントにアクセスできます。 それがどのように機能するかを見てみましょう。

ステップ5—RESTAPIを使用する

管理コンソールを使用してさまざまなタスクを実行する方法がわかったので、BaasBoxのRESTAPIを使用して同じタスクを実行する方法を見てみましょう。

REST APIは、Webアプリやモバイルアプリからコンソールアプリまで、さまざまな種類のアプリケーションで使用できます。次の例では、curlを使用してリクエストをシミュレートします。 フロントエンドプラットフォームに応じて、これらの例をニーズに適合させることができます。

RESTAPIを使用したユーザーの作成

ユーザーの作成に使用されるcurlコマンドの一般的な形式は次のとおりです。

  1. curl http://your_ip_address:9000/user \
  2. -d '{"username" : "username", "password" : "password"}' \
  3. -H Content-type:application/json \
  4. -H X-BAASBOX-APPCODE:baasbox_appcode

この例では、ユーザー名user2のユーザーを作成します。 好きなパスワードを選択してください。 X-BAASBOX-APPCODEヘッダーのデフォルト値である1234567890を使用します。 これらの値を使用すると、コマンドは次のようになります。

  1. curl http://your_ip_address:9000/user \
  2. -d '{"username" : "user2", "password" : "user2_password"}' \
  3. -H Content-type:application/json \
  4. -H X-BAASBOX-APPCODE:1234567890

このコマンドを実行した場合の出力は、次のようになります。

Output
{"result":"ok","data":{"user":{"name":"user2","status":"ACTIVE","roles":[{"name":"registered","isrole":true}]},"id":"a4353548-501a-4c55-8acd-989590b2393c","visibleByAnonymousUsers":{},"visibleByTheUser":{},"visibleByFriends":{},"visibleByRegisteredUsers":{"_social":{}},"signUpDate":"2016-04-05T13:12:17.452-0400","generated_username":false,"X-BB-SESSION":"992330a3-4e2c-450c-8d83-8eaf2903188b"},"http_code":201}

上記の出力のフォーマットされたバージョンは次のとおりです。

Output
{ "result": "ok", "data": { "user": { "name": "user2", "status": "ACTIVE", "roles": [ { "name": "registered", "isrole": true } ] }, "id": "a4353548-501a-4c55-8acd-989590b2393c", "visibleByAnonymousUsers": {}, "visibleByTheUser": {}, "visibleByFriends": {}, "visibleByRegisteredUsers": { "_social": {} }, "signUpDate": "2016-04-05T13:12:17.452-0400", "generated_username": false, "X-BB-SESSION": "992330a3-4e2c-450c-8d83-8eaf2903188b" }, "http_code": 201 }

上記の出力で強調表示されている値に注意してください。 BaasBoxは、ユーザーごとに一意のidを生成します。 このIDは、REST APIを介してこの特定のユーザーのドキュメントをフェッチ、変更、または削除する場合に使用します。

2番目に強調表示されている値はX-BB-SESSIONです。これは、user2が行う今後のすべてのクエリに存在する必要があるセッションIDです。 以降のセクションでは、この値をuser2_session_idと呼びます。

RESTAPIを使用してユーザーをログインする

user2のセッションIDを取得したので、管理コンソールで以前に作成したユーザーであるuser1のセッションIDを取得しましょう。 これを行うには、RESTAPIを使用してuser1としてログインします。 ログインに使用されるcurlコマンドの一般的な形式は次のとおりです。

  1. curl http://your_ip_address:9000/login \
  2. -d "username=username" \
  3. -d "password=password" \
  4. -d "appcode=baasbox_appcode"

この場合、ユーザー名はuser1、パスワードはuser1の作成時に使用されたもの、BaasBoxアプリコードは1234567890です。 これらの値を使用すると、コマンドは次のようになります。

  1. curl http://your_ip_address:9000/login \
  2. -d "username=user1" \
  3. -d "password=user1_password" \
  4. -d "appcode=1234567890"

このコマンドを実行した場合の出力は、次のようになります。

Output
{"result":"ok","data":{"user":{"name":"user1","status":"ACTIVE","roles":[{"name":"registered","isrole":true}]},"id":"84191e4c-2471-48a7-98bb-ecdaf118285c","visibleByAnonymousUsers":{},"visibleByTheUser":{},"visibleByFriends":{},"visibleByRegisteredUsers":{"_social":{}},"signUpDate":"2016-04-05T13:06:35.750-0400","generated_username":false,"X-BB-SESSION":"74400b4b-d16c-45a2-ada3-1cd51cc202bb"},"http_code":200}

上記の出力のフォーマットされたバージョンは次のとおりです。

Output
{ "result": "ok", "data": { "user": { "name": "user1", "status": "ACTIVE", "roles": [ { "name": "registered", "isrole": true } ] }, "id": "84191e4c-2471-48a7-98bb-ecdaf118285c", "visibleByAnonymousUsers": {}, "visibleByTheUser": {}, "visibleByFriends": {}, "visibleByRegisteredUsers": {} }, "signUpDate": "2016-04-05T13:06:35.750-0400", "generated_username": false, "X-BB-SESSION": "74400b4b-d16c-45a2-ada3-1cd51cc202bb" }, "http_code": 200 }

上記の応答の強調表示された部分は、user1が行う今後のすべてのクエリで使用する必要があるuser1のセッションIDを示しています。 以降、この値をuser1_session_idと呼びます。

RESTAPIを使用したドキュメントの作成

アプリケーションで2つのドキュメントを作成しましょう。 1つのドキュメントを管理コンソールを使用して作成したユーザーであるuser1に割り当て、もう1つのドキュメントをRESTAPIを使用して作成したユーザーであるuser2に割り当てます。 作成するドキュメントの構造は、次の例のようになります。

Sample Document Contents
{ "list_name": "Task List Name", "tasks": [ { "task": "Task Details", "done": false }, { "task": "Task Details", "done": false } ] }

構造を見ると、ドキュメントには2つのプロパティがあることがわかります。 1つはタスクリストの名前で、もう1つはそのリスト内のタスクのリストです。

新しいドキュメントの作成に使用されるcurlコマンドの一般的な形式は次のとおりです。

  1. curl -X POST http://your_ip_address:9000/document/collection_name \
  2. -d 'json_formatted_document' \
  3. -H Content-type:application/json \
  4. -H X-BB-SESSION:session_id

user1のドキュメントを作成することから始めましょう。 この場合、コレクションの名前はtodosであり、挿入するドキュメントは次のようになります。

Document Contents
{ "list_name": "User 1 - List 1", "tasks": [ { "task": "User1 List1 task 1", "done": false }, { "task": "User1 List1 task 2", "done": false } ] }

ドキュメントがuser1に関連付けられるようにするために、そのユーザーをシステムにログインしたときに取得したuser1のセッションIDを使用します。

次のコマンドを入力して、user1のドキュメントを作成します。

  1. curl -X POST http://your_ip_address:9000/document/todos \
  2. -d '{"list_name":"User 1 - List 1","tasks":[{"task":"User1 List1 task 1","done":false},{"task":"User1 List1 task 2","done":false}]}' \
  3. -H Content-type:application/json \
  4. -H X-BB-SESSION:user1_session_id

このコマンドを実行すると、次のような出力になります。

Output
{"result":"ok","data":{"@rid":"#24:1","@version":2,"@class":"todos","list_name":"User 1 - List 1","tasks":[{"task":"User1 List1 task 1","done":false},{"task":"User1 List1 task 2","done":false}],"id":"c83309e7-cbbd-49c8-a76b-9e8fadc72d6f","_creation_date":"2016-04-05T20:34:30.132-0400","_author":"user1"},"http_code":200}

上記の出力のフォーマットされたバージョンは次のとおりです。

Output
{ "result": "ok", "data": { "@rid": "#24:1", "@version": 2, "@class": "todos", "list_name": "User 1 - List 1", "tasks": [ { "task": "User1 List1 task 1", "done": false }, { "task": "User1 List1 task 2", "done": false } ], "id": "c83309e7-cbbd-49c8-a76b-9e8fadc72d6f", "_creation_date": "2016-04-05T20:34:30.132-0400", "_author": "user1" }, "http_code": 200 }

新しいユーザーの場合と同様に、BaasBoxはすべての新しいドキュメントに対してidを作成します。これは、前の例で強調表示されています。 このuser2にこのリストへのアクセスを許可するときに後で使用するので、このidをメモしてください。 以降のセクションでは、このドキュメントのIDをuser1_list1_idと呼びます。

ここで、自分で同じ方法を使用して次のことを行います。

  • user1の別のリストを作成します
  • user2のリストを2つ作成します

これらの手順を完了すると、todosコレクションに合計4つのドキュメントが作成されます。 以降のセクションでは、これらのドキュメントのIDを次のように参照します。

  • user1_list1_id
  • user1_list2_id
  • user2_list1_id
  • user2_list2_id

これで、使用できるデータがいくつかできたので、RESTAPIを使用してデータをクエリする方法を調査できます。

RESTAPIを使用した単一のドキュメントの取得

idによってドキュメントをフェッチするために使用されるcurlコマンドの一般的な形式は次のとおりです。

  1. curl http://your_ip_address:9000/document/collection_name/document_id \
  2. -H X-BB-SESSION:session_id

user1によって作成された最初のドキュメントを(user1の資格情報を使用して)フェッチする場合、コマンドは次のようになります。

  1. curl http://your_ip_address:9000/document/todos/user1_list1_id \
  2. -H X-BB-SESSION:user1_session_id

このコマンドを実行すると、次のような出力が得られます。

Output
{"result":"ok","data":{"@rid":"#24:1","@version":2,"@class":"todos","list_name":"User 1 - List 1","tasks":[{"task":"User1 List1 task 1","done":false},{"task":"User1 List1 task 2","done":false}],"id":"c83309e7-cbbd-49c8-a76b-9e8fadc72d6f","_creation_date":"2016-04-05T20:34:30.132-0400","_author":"user1"},"http_code":200}

応答のフォーマットされたバージョンは次のとおりです。

Output
{ "result": "ok", "data": { "@rid": "#24:1", "@version": 2, "@class": "todos", "list_name": "User 1 - List 1", "tasks": [ { "task": "User1 List1 task 1", "done": false }, { "task": "User1 List1 task 2", "done": false } ], "id": "c83309e7-cbbd-49c8-a76b-9e8fadc72d6f", "_creation_date": "2016-04-05T20:34:30.132-0400", "_author": "user1" }, "http_code": 200 }

単一のドキュメントを取得する方法がわかったので、同じことをもう一度試してください。ただし、今回はuser2のセッションIDを使用してドキュメントを取得します。

  1. curl -X POST http://your_ip_address:9000/document/todos/user1_list1_id \
  2. -H X-BB-SESSION:user2_session_id

このコマンドを実行すると、次のような出力が表示されます。

Output
{"result":"error","message":"c83309e7-cbbd-49c8-a76b-9e8fadc72d6f not found","resource":"/document/todos/c83309e7-cbbd-49c8-a76b-9e8fadc72d6f","method":"GET","request_header":{"Accept":["*/*"],"Host":["localhost:9000"],"User-Agent":["curl/7.35.0"],"X-BB-SESSION":["8f5a2e48-0f42-4478-bd1b-d28699158c4b"]},"API_version":"0.9.5","http_code":404}

読みやすくするためにフォーマットされた同じ出力を次に示します。

Output
{ "result": "error", "message": "c83309e7-cbbd-49c8-a76b-9e8fadc72d6f not found", "resource": "\/document\/todos\/c83309e7-cbbd-49c8-a76b-9e8fadc72d6f", "method": "GET", "request_header": { "Accept": [ "*\/*" ], "Host": [ "localhost:9000" ], "User-Agent": [ "curl\/7.35.0" ], "X-BB-SESSION": [ "8f5a2e48-0f42-4478-bd1b-d28699158c4b" ] }, "API_version": "0.9.5", "http_code": 404 }

ご覧のとおり、user2はこのドキュメントを作成せず、このドキュメントにアクセスできなかったため、フェッチ操作が失敗しました。 コマンドをuser2として実行しようとしたが、user2によって作成されたドキュメントのidを使用すると、そのドキュメントを正常にフェッチできます。

RESTAPIを使用したすべてのドキュメントの取得

コレクションからアクセス可能なすべてのドキュメントをフェッチするために使用されるcurlコマンドの一般的な形式は次のとおりです。

  1. curl http://your_ip_address:9000/document/collection_name \
  2. -H X-BB-SESSION:session_id

このコマンドは、ユーザーがアクセスできるドキュメントのみを返すことに注意してください。 たとえば、このコマンドをuser1として実行してみましょう。

  1. curl http://your_ip_address:9000/document/todos \
  2. -H X-BB-SESSION:user1_session_id

このコマンドを実行すると、次のような出力が得られます。

Output
{"result":"ok","data":[{"@rid":"#24:1","@version":2,"@class":"todos","list_name":"User 1 - List 1","tasks":[{"task":"User1 List1 task 1","done":false},{"task":"User1 List1 task 2","done":false}],"id":"c83309e7-cbbd-49c8-a76b-9e8fadc72d6f","_creation_date":"2016-04-05T20:34:30.132-0400","_author":"user1"},{"@rid":"#24:2","@version":1,"@class":"todos","list_name":"User 1 - List 2","tasks":[{"task":"User1 List2 task 1","done":false},{"task":"User1 List2 task 2","done":false}],"id":"7c99c877-d269-4281-8a22-ef72175085f4","_creation_date":"2016-04-05T20:46:14.338-0400","_author":"user1"}],"http_code":200}

その出力のフォーマットされたバージョンは次のとおりです。

Output
{ "result": "ok", "data": [ { "@rid": "#24:1", "@version": 2, "@class": "todos", "list_name": "User 1 - List 1", "tasks": [ { "task": "User1 List1 task 1", "done": false }, { "task": "User1 List1 task 2", "done": false } ], "id": "c83309e7-cbbd-49c8-a76b-9e8fadc72d6f", "_creation_date": "2016-04-05T20:34:30.132-0400", "_author": "user1" }, { "@rid": "#24:2", "@version": 1, "@class": "todos", "list_name": "User 1 - List 2", "tasks": [ { "task": "User1 List2 task 1", "done": false }, { "task": "User1 List2 task 2", "done": false } ], "id": "7c99c877-d269-4281-8a22-ef72175085f4", "_creation_date": "2016-04-05T20:46:14.338-0400", "_author": "user1" } ], "http_code": 200 }

出力からわかるように、user1がアクセスしたドキュメントのみが返されました。 user2に属するセッションIDを使用して同じクエリを実行すると、異なるドキュメントのセットが表示されます。

RESTAPIを使用したドキュメントの更新

ドキュメントの更新に使用されるcurlコマンドの一般的な形式は次のとおりです。

  1. curl -X PUT http://your_ip_address:9000/document/collection_name/document_id \
  2. -d 'new_json_formatted_document' \
  3. -H Content-type:application/json \
  4. -H X-BB-SESSION:session_id

ドキュメントを更新する際に留意すべき点が2つあります。

  • ドキュメントの所有者のみがドキュメントを変更できます
  • アップデートは、古いドキュメントと新しいドキュメントをマージしません。 古いドキュメントを新しいドキュメントに置き換えます。 これは、更新コマンドに元のバージョンからいくつかのフィールドが欠落しているドキュメントが含まれている場合、これらのフィールドは失われることを意味します。

このコマンドを使用して、IDuser1_list1_idのドキュメントを次の内容で更新してみましょう。

New Document Contents
{ "list_name": "User 1 - List 1 Updated", "tasks": [ { "task": "New User1 List1 task 1", "done": false } ] }

この更新を行うためのコマンドは次のとおりです。

  1. curl -X PUT http://your_ip_address:9000/document/todos/user1_list1_id \
  2. -d '{"list_name":"User 1 - List 1 Updated","tasks":[{"task":"New User1 List1 task 1","done":false}]}' \
  3. -H Content-type:application/json \
  4. -H X-BB-SESSION:user1_session_id

このコマンドを実行すると、次のような出力が得られます。

Output
{"result":"ok","data":{"@rid":"#24:1","@version":4,"@class":"todos","list_name":"User 1 - List 1 Updated","tasks":[{"task":"New User1 List1 task 1","done":false}],"id":"c83309e7-cbbd-49c8-a76b-9e8fadc72d6f","_creation_date":"2016-04-05T20:34:30.132-0400","_author":"user1"},"http_code":200}

これが同じ出力で、フォーマットされています。

Output
{ "result": "ok", "data": { "@rid": "#24:1", "@version": 4, "@class": "todos", "list_name": "User 1 - List 1 Updated", "tasks": [ { "task": "New User1 List1 task 1", "done": false } ], "id": "c83309e7-cbbd-49c8-a76b-9e8fadc72d6f", "_creation_date": "2016-04-05T20:34:30.132-0400", "_author": "user1" }, "http_code": 200 }

ご覧のとおり、ドキュメントは新しい情報で更新されています。

RESTAPIを使用したドキュメントの削除

ドキュメントの削除に使用されるcurlコマンドの一般的な形式は次のとおりです。

  1. curl -X DELETE http://your_ip_address:9000/document/collection_name/document_id \
  2. -H X-BB-SESSION:session_id

ドキュメントを削除できるのは、ドキュメントの所有者とドキュメントに対するdelete権限を持つユーザーのみです。

次のように、このコマンドを使用してIDuser1_list1_idのドキュメントを削除しましょう。

  1. curl -X DELETE http://your_ip_address:9000/document/todos/user1_list1_id \
  2. -H X-BB-SESSION:user1_session_id

このコマンドを実行すると、次の出力が得られます。

Output
{"result":"ok","data":"","http_code":200}

これは、ドキュメントが正常に削除されたことを示します。 idが今後このドキュメントにアクセスしようとすると、失敗します。

RESTAPIを使用して別のユーザーにアクセスを許可する

デフォルトで、BaasBoxがユーザーが自分で作成していないドキュメントにアクセスできないようにする方法を見てきました。 ただし、複数のユーザーにドキュメントへのアクセスを許可する必要がある場合があります。 user2にIDuser1_list1_idのドキュメントへのアクセスを許可しましょう。

ドキュメントへのアクセスを許可するために使用されるcurlコマンドの一般的な形式は次のとおりです。

  1. curl -X PUT http://your_ip_address:9000/document/collection_name/document_id/access_type/user/username \
  2. -H X-BB-SESSION:session_id

このコマンドは、このドキュメントへの完全なアクセス権を持つユーザーによって実行された場合にのみ機能します。 access_typeプレースホルダーには、次の4つの値のいずれかを指定できます。

  • 読む
  • アップデート
  • 消去
  • すべて

user2にIDuser1_list1_idのドキュメントへの読み取りアクセスを許可するには、user1のセッションIDを使用して次のコマンドを実行します。

  1. curl -X PUT http://your_ip_address:9000/document/todos/user1_list1_id/read/user/user2 \
  2. -H X-BB-SESSION:user1_session_id

このコマンドを実行すると、次の出力が得られます。

Output
{"result":"ok","data":"","http_code":200}

これは、user2がドキュメントuser1_list1_idにアクセスできるようになったことを示しています。 このドキュメントにuser2としてアクセスしようとすると、エラー応答ではなくドキュメントの詳細が表示されるようになります

ステップ6—スーパーバイザーを使用してアプリケーションを実行し続ける

長時間実行されているアプリケーションがある場合は常に、実行が停止する可能性があるというリスクがあります。 これは、アプリケーションエラー、システムの再起動など、さまざまな理由で発生する可能性があります。 予期しないシャットダウンが発生した場合に再起動するようにアプリケーションを構成することをお勧めします。 これにより、アプリケーションを維持するための管理オーバーヘッドが最小限に抑えられます。

このアプリケーションでは、スーパーバイザーを使用します。これにより、長時間実行されるアプリケーションを簡単に管理できます。 Supervisorに慣れていない場合は、 UbuntuにSupervisorをインストールして管理する方法について詳しくは、こちらをご覧ください。

まず、Supervisorをインストールします。

  1. sudo apt-get install supervisor

スーパーバイザーにアプリケーションを管理させるには、構成ファイルを作成する必要があります。 このファイルにbaasbox.confという名前を付け、/etc/supervisor/conf.dディレクトリに配置します。

  1. sudo nano /etc/supervisor/conf.d/baasbox.conf

必要に応じて、強調表示されたセクションを置き換えて、ファイルに次のように入力します。

/etc/supervisor/conf.d/baasbox.conf
[program:Baasbox]
directory = /home/sammy/baasbox-0.9.5
command = /home/sammy/baasbox-0.9.5/start
autostart = true
autorestart = true
startsecs = 5
user = sammy
stdout_logfile = /var/log/supervisor/baasbox.log

次に、これらの変更をスーパーバイザーに通知し、スーパーバイザーにこれらの変更を使用させる必要があります。 次のコマンドを実行します。

  1. supervisorctl reread

次に、次のコマンドを実行します。

  1. supervisorctl update

これで、何らかの理由でアプリケーションがシャットダウンするたびに、Supervisorは手動による介入を必要とせずにアプリケーションが再起動することを確認します。

結論

この記事では、BaasBoxを使用して、管理コンソールとREST APIを使用してコンテンツ、ユーザー、およびアクセス許可を管理する方法について説明しました。 この記事で取り上げたトピックに加えて、BaasBoxが提供するものは他にもたくさんあります。 BaasBox管理コンソールをさらに詳しく調べて、ファイルの管理、データベースバックアップの作成と復元、およびAPIエンドポイントの可用性の構成を可能にするセクションについて理解することができます。 さらに重要なことは、次のアプリケーションでBaasBoxの使用を開始する準備が整ったことです。