Graph API bude mít minimálně dvě rozhraní. Jedno přes command line utilitu spouštěnou přímo na serveru, která zpracuje textový dotaz, převede jej na query a pošle jej Graph API. Druhé rozhraní bude REST API, které také převede REST dotaz na query.
Graph API Query je objekt skládající se z nodu, akce a sekvence dat:
Tento dotaz lze textově reprezentovat jako:
<node> <action> [<object> [| [<object2> [| ... ]]] "\n"
Tyto textové reprezentace dotazů mohou být uloženy do souboru jako skript. (navrhuji název formátu: GQL - graph query language)
Příklad:
/app/evidence/members create { name: "Jan Novák" }
/node create { name: "/status", router: { name: "StorageRouter" } }
/app/forum/post create { content: "foo" }
/app/forum/post update { id: "507c7f79fcf86cd7994f6c0e", content: "bar" }
/app/forum/post delete { id: "507c7f79fcf86cd7994f6c0e" }
CLI input představuje command line utilita graph, která zpracuje vstup a předá jej procesoru GQL
GQL input převádí GQL sekvence na query
Graph query se podívá na node, zjistí k němu routery a query předá vybraným routerům v sekvenci, případně paralelně, pokud si jiné aplikace naváží nad node další routery.
Každý node bude mít specifikovaný svůj hlavní (default) router (nebo sekvenci) a jako výstup bude použit výstup právě z něj. Výstup z případných paralelních routerů navázaných dalšími aplikacemi API vracet zpět klientovi nebude.
Každý router má metodu
route(query, callback)
EchoRouter
vrací zpět data, která dostal
RedirectRouter
redirectuje dotaz na jiný node
HTTPRouter
redirectuje dotaz na jiný server přes HTTP dotaz (REST client)
StorageRouter
obsluhuje databázi
graph-rest-server (app)
graph (app) - command line utilita používající CLI
graph-cli (lib)
graph-common (lib)
graph-router-http (plugin)