Obsah
Open Graph API
- řešitel:
- Tomáš Klapka
- kontrolor:
- lukas_novy
- příslušný orgán:
- Technické oddělení
- veřejné peníze:
- ne
- zahájení:
- 2012-11-02
- popis:
- Open Graph API bude inspirována existujícími implementacemi Graph API (např FB Open Graph). Součástí bude grafová databáze s možností připojení aplikací a poskytnutí aplikacím prostoru pro svoje data a navázání vlastní funkcionality nad operace s API (možnost dodefinovat si vlastní API). Do Graph API si budou stranické systémy ukládat data a API umožní komunikaci mezi aplikacemi a systémy. Graph API bude mít public přístup k veřejným datům.
Rozhraní
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:
- node - název nodu (příklad: /app/evidence/members, /app/forum/topic, /status, …). Node by mohl být i URL(?)
- action - create/read/update/delete
- object - JSON data
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" }
REST API
CLI
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
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.
Routers
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
Předpokládané moduly a jejich komponenty
graph-rest-server (app)
- REST - REST API server volající query
graph (app) - command line utilita používající CLI
graph-cli (lib)
- CLI - CLI používající GQL volající query
graph-common (lib)
- Graph
- Query
- GQL
- Storage (drivers pluginable)
- MongoDBStorage (plugin)
- ConfigurationManager (replacable/pluginable)
- NodeManager (replacable/pluginable)
- RouteManager (replacable/pluginable, routers pluginable)
- EchoRouter (plugin)
- StorageRouter (plugin)
- RedirectRouter (plugin)
graph-router-http (plugin)
- HTTPRouter - přesměrovává dotazy na HTTP (např. redirectování REST dotazů na jiné URL)
Další kroky
- database access (Storage, MongoDBStorage, StorageRouter)
- nodes and routers management - správa nodů a routerů
- application router - přidávající aplikační vrstvu + OAuth2 + HTTP PUSH
- přístupy = autentizace (systém identit) a autorizace (systém oprávnění)
- federace - možnost propojení graphových databází
- quota - pro možnost nastavení limitů pro aplikace
- klientské knihovny a ORM drivery
- transakce
- verzování dat
- asym. cryptování objektů (částí objektů)
- RDF / JSON-LD
- decentralizace dat
- decentralizace přístupového bodu API
Kontakty a odkazy
- irc://irc.pirati.cz/#graph - IRC kanál, kde se scházíme
- https://github.com/pirati-cz/graph - docker container (běžící prostředí) a instalátor
- https://github.com/pirati-cz/graph-common - Graph API core js knihovna
- https://forum.pirati.cz/technicky-odbor-f183/graph-api-t13985.html - diskuze na fóru
- https://index.docker.io/u/piraticz/graph/ - docker image