A cayley http
parancs
#
Talán a cayley http
a legismertebb, és leggyakrabban használt a cayley parancsok közül.
Ez egy olyan alkalmazás, amely tartalmaz quad-store-t, query engine-t és egy HTTP server-t is, ami a Cayley
lényegében összes funkcionalitását elérhetővé teszi a REST API interfészen keresztül külső alkalmazások számára, ezen felül egy web-es grafikus felületet is biztosít a felhasználóinak.
Az 1. ábra szemlélteti az összes olyan komponenst, amit használni lehet a cayley http
üzemmódban futó Cayley
-vel.

1. ábra: cayley http
A cayley http
által biztosított REST API végpontok leírását a hivatalos dokumentációban olvashatjuk. A 3rd party APIs dokumentációs oldalak leírják, hogy milyen programozási nyelveken, és milyen könyvtárakkal férhetünk hozzá a cayley http
server-hez
A Cayley HTTP server elindítása #
Indítás alapértelmezett beállításokkal #
A cayley http
parancs végrehajtása elindítja a server-t az alapértelmezett beállításokkal:
$ cayley http
I0916 08:00:12.107989 6702 cayley.go:63] Cayley version: 0.7.5 (cf576babb7db)
I0916 08:00:12.108196 6702 database.go:187] using backend "memstore"
I0916 08:00:12.108322 6702 http.go:197] using assets from "/snap/cayley/2"
I0916 08:00:12.108805 6702 http.go:42] listening on 127.0.0.1:64210, web interface at http://127.0.0.1:64210
A server ekkor egy üres, in-memory adatbázist hoz létre. A server alapértelmezés szerint a 64210
porton figyel. Egy böngészővel megnyithatjuk a http://127.0.0.1:64210
URL-t, és ekkor megjelenik a web UI, amelyen keresztül query-ket hajthatunk végre az adatbázison.
Indítás in-memory store-ral, automatikus adatbetöltéssel #
Jelezhetjük a cayley http
parancs számára, hogy az indulást követően azonnal töltse fel egy adatfile tartalmát az adatbázisba. Erre a célra a --load <data-file-path>
argumentumot alkalmazzuk.
$ cayley http --load data/testdata.nq
I0916 08:10:40.473364 7087 cayley.go:63] Cayley version: 0.7.5 (cf576babb7db)
I0916 08:10:40.473602 7087 database.go:187] using backend "memstore"
I0916 08:10:40.473935 7087 database.go:250] loaded "data/testdata.nq" in 266.525µs
I0916 08:10:40.474084 7087 http.go:197] using assets from "/snap/cayley/2"
I0916 08:10:40.474498 7087 http.go:42] listening on 127.0.0.1:64210, web interface at http://127.0.0.1:64210
A feltöltött adatok azonnal rendelkezésre fognak állni, és mind a web-es UI-on, mind a REST API-n keresztül lekérdezéseket és módosításokat hajthatunk végre azokon. Az adatok ebben az esetben is még csak in-memory tárolódnak.
Indítás perzisztens store-ral, és adatfeltöltéssel #
A cayley http
parancsot úgy is indíthatjuk, hogy az perzisztens adatbázist használjon. Ebben az esetben két lehetőség közül választhatunk:
- Inicializálunk egy üres, perzisztens store-t, és esetleg adatokat is töltünk fel rögtön, az indulást követően.
- Egy már korábban létrehozott üres, vagy adatokkal feltöltött adatbázist nyitunk meg. Egy ilyen adatbázis létrehozásához a
cayley init
éscayley load
parancsokat használhatjuk.
Indításkor hozzunk létre egy perzisztens adatbázist, és rögtön töltsünk is bele adatokat:
$ cayley http --init --db bolt --dbpath /home/tombenke/tmp/cayley/ --load data/testdata.nq
I0916 08:20:05.039047 7367 cayley.go:63] Cayley version: 0.7.5 (cf576babb7db)
I0916 08:20:05.039234 7367 database.go:187] using backend "bolt" (/home/tombenke/tmp/cayley/)
I0916 08:20:05.070109 7367 database.go:250] loaded "data/testdata.nq" in 9.150519ms
I0916 08:20:05.070347 7367 http.go:197] using assets from "/snap/cayley/2"
I0916 08:20:05.071829 7367 http.go:42] listening on 127.0.0.1:64210, web interface at http://127.0.0.1:64210
I0916 08:20:11.371920 7367 http.go:100] started POST /api/v1/query/gizmo for 127.0.0.1:39426
I0916 08:20:11.372573 7367 http.go:102] completed 200 OK /api/v1/query/gizmo in 666.087µs
I0916 08:20:17.928216 7367 http.go:100] started POST /api/v1/query/gizmo for 127.0.0.1:39426
I0916 08:20:17.932551 7367 http.go:102] completed 200 OK /api/v1/query/gizmo in 4.335239ms
készítsünk elő egy perzisztens store-t az init
és load
parancsokkal, majd indítsuk el a http
server-t:
$ cayley init --db bolt --dbpath /home/tombenke/tmp/cayley/
I0916 08:21:00.701903 7460 cayley.go:63] Cayley version: 0.7.5 (cf576babb7db)
I0916 08:21:00.702107 7460 database.go:187] using backend "bolt" (/home/tombenke/tmp/cayley/)
$ cayley load --db bolt --dbpath /home/tombenke/tmp/cayley/ --load data/testdata.nq
I0916 08:21:42.843042 7509 cayley.go:63] Cayley version: 0.7.5 (cf576babb7db)
I0916 08:21:42.843269 7509 database.go:187] using backend "bolt" (/home/tombenke/tmp/cayley/)
$ cayley http --db bolt --dbpath /home/tombenke/tmp/cayley/
I0916 08:22:08.376538 7573 cayley.go:63] Cayley version: 0.7.5 (cf576babb7db)
I0916 08:22:08.376726 7573 database.go:187] using backend "bolt" (/home/tombenke/tmp/cayley/)
I0916 08:22:08.379455 7573 http.go:197] using assets from "/snap/cayley/2"
I0916 08:22:08.380016 7573 http.go:42] listening on 127.0.0.1:64210, web interface at http://127.0.0.1:64210
Mindkét esetben elérhetjük az adatokat a REST API-n keresztül, rögtön az indítást követően.
Note:
Mind a
cayley load
és acayley save
parancsok használhatóak adatfeltöltésre, ill. kiírásra olyan adat adatbázisból, amit acayley http
server is el tud érni, de csak akkor, ha a server le van állítva, mivel az adatbázist egyidejűleg csak egy alkalmazás használhatja közvetlenül. Emiatt az 1. ábrán ezt a két segédprogramot szaggatott vonallal kötöttük össze a store-ral.
A Web-es felhasználói felület #
Indítsuk el a cayley http
server-t akár in-memory, akár perzisztens store-ral, úgy, hogy az tartalmazza a feltöltött teszt adatokat, ahogyan ezt az imént leírtuk a megelőző alfejezetekben. Ezt követően nyissuk meg a http://127.0.0.1:64210
URL-t egy böngészővel. A böngésző ablakban meg fog jelenni a Cayley
web-es felhasználói felülete. A jobb felső területen elhelyezkedő szövegbeviteli területen gépeljük be a g.V().GetLimit(2)
query kifejezést, majd nyomjuk meg a jobb felső részel látható “Run Query” gombot Ekkor a query végrehajtódik, és az ablak jobb alsó területén megjelenik a keresés eredménye, ahogyan azt a 2. ábrán láthatjuk.

Figure 2.: cayley http UI
A web-es felület használatának leírása a megtalálható a hivatalos dokumentációban.
Adat importálás és exportálás #
Ha olyankor is szeretnénk adatokat fel és letölteni az adatbázisból, amikor a cayley http
server éppen fut, akkor azt a REST interfészen keresztül tehetjük meg. létezik két segédprogram, amit a Cayley
forráskódjában találhatunk: a cayleyimport
és a cayleyexport
.
Klónozzuk le a cayleygraph/cayley repository-t, és akkor tudjuk futtatni ezeket a programokat go run
paranccsal, ahogyan azt a következő példában lentebb láthatjuk.
Adatok importálása az adatbázisba a REST API-n keresztül:
$ go run <path-to-the-cayley-source>/cmd/cayleyimport/cayleyimport.go data/testdata.nq
Successfully wrote 15 quads.
Adatok exportálása file-ba az adatbázisból a REST API-n keresztül:
go run <path-to-the-cayley-source>/cmd/cayleyexport/cayleyexport.go -o out.nq
Adatok exportálása az adatbázisból a standard output-ra, a REST API-n keresztül. Mivel ebben az esetben a kimeneti file neve nincs megadva, ezért a program nem tudja meghatározni a kimeneti reprezentációs formátumot. Emiatt azt külön meg kell határoznunk a --format
argumentummal:
$ go run ~/sandbox/cayley/cayley/cmd/cayleyexport/cayleyexport.go --format jsonld
[{"@id":"alice","follows":[{"@id":"bob"}]},{"@id":"bob","follows":[{"@id":"fred"}],"status":[{"@value":"cool_person"}]},{"@id":"charlie","follows":[{"@id":"bob"},{"@id":"dani"}]},{"@id":"dani","follows":[{"@id":"bob"},{"@id":"greg"}],"status":[{"@value":"cool_person"}]},{"@id":"emily","follows":[{"@id":"fred"}]},{"@id":"fred","follows":[{"@id":"greg"}]},{"@id":"greg","status":[{"@value":"cool_person"}]},{"@id":"predicates","are":[{"@id":"follows"},{"@id":"status"}]},{"@graph":[{"@id":"emily","status":[{"@value":"smart_person"}]},{"@id":"greg","status":[{"@value":"smart_person"}]}],"@id":"smart_graph"}]