====== 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: [ [| [ [| ... ]]] "\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 === {{ 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