Image
Top
Navigation

Rest APIを試してみよう

OrientDBはサーバーを立ち上げるだけでRestによる操作が可能です。

それでは、例の如くサンプルデーターベース GratefulDeadConcerts につないでみましょう。
構文は以下のとなりますのでで

構文:http://<server>:[<port>]/connect/<database>
例 :http://localhost:2480/connect/GratefulDeadConcerts

それでは私の環境に接続してみます
こちらで接続するとに orientdb-server-config.xml 記載してある user 情報での基本認証を要求されます。

今回はRestの操作をわかりやすくするためにプログラムからではなく Firefox の RestClient を使用してみます。
1

この接続では、上記のconnectはレスポンスの body は存在しません。

次に、Console Command の info に相当する機能を使ってデータベースの情報を取得してみましょう。

構文:http://<server>:[<port>]/database/<database>
例 :http://localhost:2480/database/GratefulDeadConcerts

こちらがその実行結果です。

2

こちらがコンソールから出力した時の結果です。

3

また、Classの情報を取得する場合は以下となります。

構文:http://<server>:[<port>]/class/<database>/<class>
例 :http://localhost:2480/class/GratefulDeadConcerts/V

この実行結果は以下です。

    {
       "name": "V",
       "superClass": "",
       "alias": null,
       "abstract": false,
       "strictmode": false,
       "clusters":
       [
           9
       ],
       "defaultCluster": 9,
       "clusterSelection": "round-robin",
       "records": 809
    }

次に実際にデータの取得を行ってみましょう。

まずは、SQLを実行してみます。・
//
Select文にてデータを取得する方法は以下となります。

構文:http://localhost:2480/query/<database>/sql/<query-text>[/<limit>][/<fetchPlan>]
例:http://172.16.251.205:2480/query/GratefulDeadConcerts/sql/select from V

この例ではこちらで試したSQLを実行して比較してみてください。

http://172.16.251.205:2480/query/GratefulDeadConcerts/sql/select * from V where name='Garcia'

の取得結果を表示してみましょう。


    {
       "result":
       [
           {
               "@type": "d",
               "@rid": "#9:8",
               "@version": 153,
               "@class": "V",
               "name": "Garcia",
               "in_sung_by":
               [
                   "#9:1",
                   "#9:4",
        ~ 長いので省略します ~
                   "#9:777",
                   "#9:797",
                   "#9:804"
               ],
               "in_written_by":
               [
                   "#9:244",
                   "#9:461",
                   "#9:465",
                   "#9:494"
               ],
               "type": "artist",
               "@fieldTypes": "in_sung_by=g,in_written_by=g"
           }
       ]
    }

これだけ簡単にHTTPからデータベースの情報を抽出できるってなかなかすごいですね。

次に更新系のSQLを試します

参照系のSQLはqueryという指定をしましたが更新系はcommandを指定します。

構文: http://<server>:[<port>]/command/<database>/<language>[/<command-text>][/limit][/<fetchPlan>] content: <command-text>

例 :Update V set performances = 1 where name = "IM A MAN"

上記の例では、performances の情報が格納されいてるレコードで name フィールドが “IM A MAN” のレコードを単純にアップデートかけています。

commandの指定を行う場合はPOSTでのリクエストになる点にご注意ください。

4
実行結果は、デフォルトでは処理件数のデフォルトを返却しています。実行結果に関しては、こちらで紹介したAfter句を利用することにより制御が可能です。

次にデータベースに登録した自前functionをRESTから呼び出してみましょう。

FunctionとはRDBMSでいうストアドプロシジャと同じものと考えてもらっても問題ありません。

詳しくは、Functionのチュートリアルかこれをご確認ください。

今回は、簡単なサンプルを実行させてみます。

上の更新の例では、”IM A MAN”レコードのperformancesを1へ更新しましたが、performancesを1だけ増やすという簡単なFunctionを作成します。

まずはFunctionを作成します。
今度はUPDATE文で使用可能な INCREMENT 句を使用してみますます。
少々RESTの話から離れますが、INCREMENT 句は、Update文でありがちな、取得した値に加(減)算するといった処理のために使います。

構文としては

UPDATE <Class名> INCREMENT "加算したいフィールド名" = <加算したい値> 

もちろん、Where句との条件は設定可能です。

それでは以下のFunctionをOrientDB Studioから登録してみましょう。

function performancesCountUp( name ){
   var result = db.command("Update V INCREMENT performances = 1 where name =?", name);
   return result;
}

5

試しに、”HEY BO DIDDLEY”で実行してみると 実行結果の value には 1 がセットされていますが、こちらは更新件数(上記のSQLの場合と一緒)です。

さて、これをREST API を使用して呼び出してみます。まずは構文です。

構文: http://<server>:[<port>]/function/<database>/<fuction名>/引数1/引数2/・・・・
例: http://localhost:2480/function/GratefulDeadConcerts/performancesCountUp/HEY BO DIDDLEY

構文が少々分かりづらいかと思いますので例をみていただければと思いますが、引数の数だけ / で引数をセットしていきます。

それでは実際にRESTクライアントから実行してみましょう。

6

OrientDB Studioと同じ結果が返却されることが確認されました。

Functionの中ではもちろんACIDトランザクションや他のFUNCTIONを呼び出すといったことが可能です。

これによりRESTによる通信を心としたモバイル・アプリケーションのといった利用が簡単に構築可能になりますね!