obnizクラウドAPIはアカウントに紐づくデバイスやサーバーレスイベントなどを操作するためのAPIです。WebAppを作成し、ユーザーから承認を得ることで自分または他のユーザーに対して利用できます。現在以下の情報が操作できます。
- WebApp自体
- WebAppのインストール情報
- 承認したユーザーのユーザー情報
- 承認したユーザーの所有デバイス
- 承認したユーザーのサーバーレスイベント
GraphQL API

obnizクラウドAPIはGraphQLを採用しています。エンドポイントは以下です
https://api.obniz.com/v1/graphql
エンドポイントに対してトークンとクエリを与えることで結果が取得できます。
const graphQLClient = new GraphQLClient(`https://api.obniz.com/v1/graphql`, {
headers: {
authorization: `Bearer ${token}`,
},
});
const query = `{
user {
id,
name,
email
}
}`;
const user = await graphQLClient.request(query);
GraphQLの通信はHTTPSプロトコルを使用して行われます。
そのため、GraphQLクライアントを使用できない場合でも、通常のHTTPリクエストと同様に扱うことが出来ます。
詳細はこちらをご覧ください。
GraphQLについて
GraphQLは必要なデータのみ取得することを可能とするクエリ言語で、SQLのSELECT文のようなものです。
GraphQL APIにはQueryとMutationが存在し、下記のように扱うことが出来ます。
- Query ≒ SELECT文
- Mutation ≒ UPDATE文
詳細はこちらをご覧ください。
ドキュメント
https://api.obniz.com/v1/graphql
をブラウザで開くことでドキュメントと共にAPIのデモ画面を開くことができます。
APIの利用にはトークンのヘッダへの付与が必要になるためオンラインデモ画面では利用できません。
実際の利用にはリクエストヘッダにトークンの付与ができるデスクトップ用のGraphQLアプリを活用するのが便利です。
SDK
GraphQL endpointを使うためのTypeScript/JavaScriptのSDKを公開しています。
https://github.com/obniz/obniz-cloud-sdk
型定義がされているため、IDEの補完やTypeScriptの型チェックを利用することができます。
使い方はREADMEを参照ください
トークン
APIを利用し、ユーザー情報にアクセスするには、WebAppを作成しユーザーにWebAppを承認してもらう必要があります。承認することでトークンが発行されます。また、トークンにはユーザーごとに発行されるものと、WebApp自体のトークンの2種類があります。
- WebApp トークン: WebApp自体のトークンです。インストール情報が取得できます。
- OAuth トークン: ユーザーが承認した場合に得られるユーザーごとのトークンです。ユーザーに紐づく情報が操作できます。
それぞれ取得にはWebAppが必要です。詳しくはアプリを御覧ください。
トークンはGraphQL APIを叩く際のリクエストヘッダーに付与します
authorization: Bearer oauth_xxxxxxx
サンプルコード
APIを利用するサンプルコードがGitHubに公開されています。
OAuthを利用したユーザー情報やデバイス情報の操作について
https://github.com/obniz/obniz-webapp-example-oauth
インストールを用いたユーザーがインストールしたアプリ情報の取得とWebサービスの開発方法について
https://github.com/obniz/obniz-webapp-example-install
インストール
IoT開発では同じプログラムを複数のデバイス共通で利用し、かつデバイスごとに違う設定で稼働させるシーンがあります。そこで、obnizのWebAppではユーザーが承認しアクセストークンを発行するだけでなく、ユーザーがWebAppを設定とともに複数「インストール」することができるようになっています。WebAppはアクセストークンを利用してそのインストール情報を取得することでWebAppを構成することができます。
ユーザーがインストールする流れは以下となります。
- サーバーシステムをAWSなどクラウドサービスで稼働しWebAppとしてobnizクラウド上に登録。
- ユーザーがWebAppを承認
- ユーザーがWebAppをインストール
インストール時にはWebAppで用意されている設定事項がユーザーに質問され、インストール時に保存されます。
また、WebAppにWebhook URLが設定されている場合はインストール時にwebhookが発行されます。 - WebAppがobnizクラウドAPIを呼び出し、インストールされている全てのWebAppを取得。
- WebApp内でインストール情報を元にプログラムを実行・場合によってはオートスケールアウトなどを実施
- ユーザーのインストールイベントごと(インストールの作成/更新/削除)発行されるwebhookまたは定期的なfetchによりユーザーの設定とWebAppを同期させる
WebAppのインストールについて詳しくは以下をご覧ください。
エラーコード一覧
コード | 説明 | 解決方法 |
---|---|---|
PERMISSION_DENIED | 権限不足 | 必要な権限を API キーに付与してください |
UNAUTHORIZED | 認証されていない | トークンを Authorization ヘッダーに入れてください |
BAD_TOKEN_TYPE | API とトークンの種類が違う | アプリに関する API はアプリトークンを使用するなど、API とトークンの種類を合わせてください |
INTERNAL_SERVER_ERROR | 内部エラーが発生した | obniz Cloud 側のエラーですので、しばらく待てば解消される可能性があります |
BAD_REQUEST | バリデーションに弾かれた | 使用不可文字が入っているなど、正しくない値を入れていないか確認してください |
TOO_MANY_REQUESTS | リクエストリミット上限に達した | 時間をおいて再度リクエストしてください |
コード | 説明 |
---|---|
OBNIZ_NOT_FOUND | Obniz が見つからない |
OBNIZ_INVALID_REGISTRATE_URL | QR コードの登録 URL が不正 |
OBNIZ_INVALID_SERIAL_CODE | 不正なシリアルコード |
OBNIZ_INVALID_TOKEN | 不正なトークン |
OBNIZ_INVALID_ID | 不正な Obniz ID |
OBNIZ_INSTALLED_APP | アプリが既にインストールされている |
OBNIZ_ALREADY_OWN | Obniz を既に所有している |
OBNIZ_UNREGISTERED | 未所有の Obniz |
OBNIZ_DELETED_ACCESS_TOKEN | Obniz のアクセストークンを削除済み |
OBNIZ_GENERATED_ACCESS_TOKEN | Obniz のアクセストークンを生成済み |
OBNIZ_NOT_INSTALLED_APP | アプリが Obniz にインストールされていない |
OBNIZ_OWNED_BY_ANOTHER_USER | 別のユーザーが所有している Obniz |
OBNIZ_INACTIVE | Obniz が非アクティブ状態 |
OBNIZ_MISMATCH_INSTALLED_APP | インストールされているアプリと設定変更しようとしているアプリが異なる |
APP_NOT_FOUND | アプリが見つからない |
APP_INVALID_ID | 不正なアプリ ID |
USER_NOT_FOUND | ユーザーが見つからない |
USER_INVALID_ID | 不正なユーザー ID |
FACILITY_NOT_FOUND | 施設が見つからない |
FACILITY_INVALID_ID | 不正な施設 ID |
EVENT_NOT_FOUND | サーバーレスイベントが存在しない |
EVENT_INVALID_ID | 不正なサーバーレスイベント ID |
OAUTH_UNAUTHORIZED | OAuth 認可されていない |
HARDWARE_NOT_FOUND | ハードウェアが見つからない |
FACILITY_OPERATION_NOT_FOUND | 施設管理オペレーションが見つからない |
FACILITY_OPERATION_INVALID_ID | 不正な施設管理オペレーション ID |
FACILITY_OPERATION_ALREADY_EXIST_ID | 施設管理オペレーション ID が既に存在している |
SEARCH_OVER_LIMITATION_DEVICE_COUNT | 検索結果が多すぎる |
SERIALCODE_NOT_FOUND | シリアルコードが見つからない |