ArangoDB はこの REST API を自動的に生成しませんが、ほとんど手間をかけずに生成できます。ノード間の接続をエッジ コレクションに格納すると、次のような小さな Foxx アプリケーションを介してそれらを公開できます。このコードは、ノードがコレクション「v」に格納され、ノード間の接続がコレクション「e」に格納されていることを前提としています。
(function() {
"use strict";
// Initialise a new FoxxApplication.
var FoxxApplication = require("org/arangodb/foxx").Controller,
controller = new FoxxApplication(applicationContext),
db = require("org/arangodb").db;
controller.get("/*", function (req, res) {
var nodeCollection = db.v;
var edgeCollection = db.e;
var requestedNode = req.suffix.pop();
try {
var node = nodeCollection.document(requestedNode);
var subNodes = edgeCollection.outEdges(nodeCollection.name() + "/" + requestedNode);
res.json({ node: node, subNodes: subNodes });
}
catch (err) {
res.json("oops, some error happened!");
}
});
}());
次の JavaScript を使用して、いくつかのサンプル ノードをセットアップしました。
db._create("v");
db._createEdgeCollection("e");
/* nodes */
db.v.save({ _key: "root" });
db.v.save( { _key: "subnode1" });
db.v.save( { _key: "subnode2" });
db.v.save( { _key: "subnode3" });
db.v.save( { _key: "subnode1-1" });
db.v.save( { _key: "subnode1-2" });
db.v.save( { _key: "subnode1-3" });
db.v.save( { _key: "subnode2-1" });
db.v.save( { _key: "subnode2-2" });
/* connections */
db.e.save("v/root", "v/subnode1", { });
db.e.save("v/root", "v/subnode2", { });
db.e.save("v/root", "v/subnode3", { });
db.e.save("v/subnode1", "v/subnode1-1", { });
db.e.save("v/subnode1", "v/subnode1-2", { });
db.e.save("v/subnode1", "v/subnode1-3", { });
db.e.save("v/subnode2", "v/subnode2-1", { });
db.e.save("v/subnode2", "v/subnode2-2", { });
Foxx アプリケーションがマウントされている場合、ノード _key を URL に入力することで、任意のノードのデータをフェッチできます (例: http://example.com:8529/myapp/rootまたはhttp://example.com:8529 )。 /myapp/subnode2-2
上記の API は、ノードのデータと、要求されたノードのすべてのサブノードを返します。完全なリクエスト URI を調べて、パスの各部分 (「root/subnode1/subnode1-1」など) ごとにノードをフェッチするなど、異なる動作に簡単に変更できます。これは、必要に応じて req.suffix を繰り返すことで実現できます。ただし、ノードの _key が既知であり、URL 経由で渡される場合は必要ありません。
また、URL を見るだけではノードとリーフ ノードを区別するのは難しいため、サブノードを返す必要があることを示す URL パラメーター「subNodes=true」を追加することをお勧めします。URL パラメータを省略した場合、サブノードを照会して返す必要はありません。