Raspberry Piなどの各種センサーデバイスから送信される情報を受け取るIoTバックエンドを構築します。今回は土壌湿度情報を保存すると想定して進めていきます。
表を作成する
HATAKE_LOGという名前の表を作成します。今回必要となる表はこれだけです。この表にセンサーデバイスから送信される情報を順次保存していきます。
SQLワークショップ > オブジェクト・ブラウザを開き、画面右上の+プルダウンメニューから表を選択します。
列
下記のように入力して次ボタンをクリックします。
表名 : HATAKE_LOG
列名 | タイプ | 精度 | スケール |
---|---|---|---|
ID | NUMBER | ||
TIMESTAMP | NUMBER | ||
MOISTURE | NUMBER |
主キー
- 新しい順序から移入
- 主キー制約名:HATAKE_LOG_PK
- 主キー:ID(Number)
- 順序名:HATAKE_LOG_SEQ
外部キー
デフォルトのまま次ボタンをクリックします。
制約
デフォルトのまま次ボタンをクリックします。
確認
表を作成ボタンをクリックします。
これで表が作成されました。
REST APIを作成する
次にこのデータベースにアクセスするためのREST APIを作成します。
まず最初におこなうのがRESTfulモジュールの作成です。
RESTfulモジュールは複数のREST APIをまとめておくための入れ物です。通常はアプリ一つにつき一つのRESTfulモジュールを作るようなイメージです。まずこの入れ物を作成します。
SQLワークショップ > RESTfulサービス > 作成ボタンをクリックします。
下記のように入力してモジュールの作成ボタンをクリックします。(下記にない項目はデフォルトのまま)
- 名前 : 畑
- URI接頭辞 : hatake/
次にテンプレートを作成します。これはAPIのURIを設定するためのものです。
下記のように入力して作成ボタンをクリックします。(下記にない項目はデフォルトのまま)
- URIテンプレート : log
次にハンドラーを作成します。ハンドラはテンプレート毎に設定され、そのAPIにアクセスがあった場合に実行するアクションを設定します。
左サイドバーで作成したテンプレート配下の+ハンドラの作成をクリックします。
下記のように入力して作成ボタンをクリックします。(下記にない項目はデフォルトのまま)
- 方法 : POST
- ソース・タイプ : PL/SQL
- セキュア・アクセスが必要:いいえ
begin
insert into hatake_log (timestamp, moisture) values (:timestamp, :moisture);
end;
これで土壌湿度情報を受け取るためのREST APIが作成されました。
あともう一つ、保存したデータを取得するAPIも作っておきましょう。
下記のように入力して作成ボタンをクリックします。(下記にない項目はデフォルトのまま)
- URIテンプレート : log/list
ハンドラーを作成します。左サイドバーで作成したテンプレート配下の+ハンドラの作成をクリックします。
下記のように入力して作成ボタンをクリックします。(下記にない項目はデフォルトのまま)
- 方法 : GET
- ソース・タイプ : 問い合わせ
- 書式 : JSON
- セキュア・アクセスが必要 : いいえ
select * from hatake_log
それでは早速テストしてみましょう。REST APIのテストにはapigeeを利用します。
アカウントをお持ちでないかたはまずサインアップをおこなってください。
アカウントを作成したらログインし、API Consoleを起動します。
apigeeは様々な有名どころのAPIアクセスをライブラリとして提供しています。
今回は今作成したばかりのカスタムREST APIにアクセスしますのでOhter (generic)を選択します。
このコンソールではHTTPメソッドとURL、それにHTTP HeaderとBodyを設定することができ、Sendボタンを押すことでリクエスト(APIコール)が投げられます。
土壌湿度を保存するAPIはHTTPメソッドがPOST、URLがhttps://apex.oracle.com/pls/apex/あなたのワークスペース名/hatake/log となり、Bodyに送信したいデータ(timestampとmoisture)を含めます。
このリクエストを送信するには、下記のように設定してSendボタンをクリックします。
- Resource: POST https://apex.oracle.com/pls/apex/evangelist/hatake/log
- Body:
Parameter | Value |
---|---|
timestamp | 1499886000 |
moisture | 50 |
成功すると右下のRequest欄にHTTP1.1 200 OKが表示さます。
そして実際にデータが保存されているかどうか確認するために、データを取得するAPIもコールしてみましょう。下記のように設定を変更し、Sendボタンをクリックします。
こちらも成功すると右下のRequest欄にHTTP1.1 200 OKが表示され、その出力をみていくとJSON形式で保存されたデータを取得できているはずです。
次のステップ
今回学んだ知識をベースに、今後本格的なサービスを開発するにあたり、下記のようなトピックを学んでください。
- 複数のデータを一度のAPIコールで保存する。
- ハンドラーで必要となるPL/SQLについて。
- APIを保護する。(認証・認可)。
- Database as a Serviceで独自SSL証明書を使ってHTTPS通信を有効化する。
- データを可視化するチャートなどのUIの開発。
知っておくと便利なAutoRESTについて
スキーマサービスやapex.oracle.comではサポートされていませんが、Database as a ServiceではAutoRESTが利用できます。AutoRESTとは、REST APIを自分でわざわざ作成せずとも、テーブルに対する基本的な操作をREST APIとして利用できるようにする機能です。
例えば、とあるテーブルに1レコードを挿入する、1レコード取得する、検索結果を取得する、レコードを更新する・削除する、複数レコードをロードするといった処理がAutoRESTで実現できます。
設定はスキーマごとに有効化をおこなうだけです。詳しくはこちらの記事で紹介されています。