====== Open Graph API ======
---- dataentry projekt ----
řešitel_page : lide:tomas_klapka #člen, který projekt přihlašuje, rozhoduje o něm a odpovídá za něj
kontrolor_page : lide:lukas_novy #člen, který dohlíží dohlíží na řešení projektu
příslušný orgán_page : to:start #výkonný orgán s odpovídající celostátní působností
veřejné peníze : ne
zahájení_dt : 2012-11-02 #datum očekávaného nebo skutečného zahájení projektu podle smlouvy o projektu
ukončení_dt : #datum očekávaného nebo skutečného ukončení projektu jeho řádným splněním nebo jiným ukončením
popis_wiki : 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:
[
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 ===
{{ projekty:graph_rest_api.png?500 }}//REST API// převede REST dotaz na query podle mapování REST metod na action
=== CLI ===
{{ projekty:graph_cli_input.png?500 }}//CLI input// představuje command line utilita //graph//, která zpracuje vstup a předá jej procesoru GQL
{{ projekty:graph_gql_input.png?500 }}//GQL input// převádí GQL sekvence na query
==== Query ====
{{ projekty:graph_query.png?500 }}//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)
{{ projekty:graph_echorouter.png?500 }}//EchoRouter//
vrací zpět data, která dostal
{{ projekty:graph_redirectrouter.png?500 }}//RedirectRouter//
redirectuje dotaz na jiný node
{{ projekty:graph_httprouter.png?500 }}//HTTPRouter//
redirectuje dotaz na jiný server přes HTTP dotaz (REST client)
{{ projekty:graph_storagerouter.png?500 }}//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/issues
* https://github.com/pirati-cz/graph-common - Graph API core js knihovna
* https://github.com/pirati-cz/graph-common/issues
* https://forum.pirati.cz/technicky-odbor-f183/graph-api-t13985.html - diskuze na fóru
* https://index.docker.io/u/piraticz/graph/ - docker image