Jak połączyć się z API Neo4j?
Neo4j domyślnie oferuje wygodny interfejs w postaci konsoli uruchamianej w przeglądarce webowej. Wystarczy połączyć się z adresem hosta na którym uruchomiona jest baza Neo4j, z portem 7474, np:
http://10.0.0.1:7474
Używając komend bazy danych, Cypher, możemy np. importować i eksportować pliki.Jednak taki sposób pracy nie daje możliwości automatyzacji zadań. Jeśli chcemy wykorzystywać silnik neo4j z poziomu innych aplikacji, automatycznie przetwarzać dane lub wygodnie pracować z grafową bazą danych potrzebujemy innej możliwości korzystania z zasobów Neo4j.
Z bazą Neo4j możemy połączyć się na kilka sposóbów. Dwa głowne to wykorzystanie sterowników oraz połączenie z wbudowanym HTTP API.
Korzystanie z gotowych bibliotek/sterówników
Neo4j oferuje gotowe oficjalne i nieoficjalne sterowniki do łączenia się z bazą z różnych środowisk. Na ich stronie znajdziemy gotowe biblioteki dla Java, Python, JavaScript, .NET, GO, Perl, PHP i inne. Niektóre ETL mają już te sterowniki wbudowane w rozszerzenia które umożliwiają połączenie się z Neo4j.
Posiadając odpowiedni sterownik możemy korzystać ze środowiska grafowej bazy danych bezpośrednio z danego języka oprogramowania/aplikacji.
Łączenie się z Neo4j HTTP API
Uruchomiona baza Neo4j posiada gotowy do użycia HTTP API. Dokumentacja do aktualnej wersji znajduje sie tutaj. Wysyłamy zapytania i odbieramy dane z tego API w formacie JSON. Daje to nam bardzo dużą swobodę; połączymy się Neo4j z każdego systemu/aplikacji.
Neo4j HTTP API umożliwia wykonanie serii instrukcji Cypher w ramach transakcji. Transakcja może być otwarta dla wielu żądań HTTP, dopóki klient nie zdecyduje się zatwierdzić lub wycofać. Każde żądanie HTTP może zawierać listę poleceń, a dla wygody możesz dołączyć polecenia wraz z żądaniem rozpoczęcia lub zatwierdzenia transakcji.
Możemy sprawdzić gotowość API odpytując:
GET http://host:7474/
W odpowiedzi otrzymamy:
{
"bolt_direct": "bolt://host:7687",
"bolt_routing": "neo4j://host:7687",
"cluster": "http://host:7687/db/{databaseName}/cluster",
"transaction": "http://host:7687/db/{databaseName}/tx",
"neo4j_version": "4.1.1",
"neo4j_edition": "community"
}
OK, jak widać API jest gotowe na nasze zapytania. By jednak produkcyjnie wykorzystywać naszą bazę musimy się zalogować.
Autoryzacja w API
Byśmy mogli odczytać lub zapisać dane w Neo4j musimy się tam zautoryzować. Autoryzacja może być przeprowadzona na dwa sposóby. Pierwszy to wysłanie nagłówka 'Authorization' w zapytaniu do API. Np:
Authorization: Basic dGVzdC5hY
Jak utworzyć hash basic? Uzyskujemy go kodujac frazę 'użytkownik:hasło' funkcją Base64.
Drugi sposób atoryzacji, prostszy, to link który zawiera dane logowania. Przykład takiego url:
http://neo4j:haslo@10.0.0.1:7474
Komunikacja z API
Komunikujemy się HTTP API Neo4j wysyłając zapytania i odbieramy odpowiedzi w formacie JSON. Zapytania wysyłamy używając metody POST. HTTP Neo4j umożliwia wykonanie serii instrukcji Cypher w ramach transakcji. Transakcja może być otwarta dla wielu żądań HTTP, dopóki klient nie zdecyduje się zatwierdzić lub wycofać transakcje.
Tak więc by wykonać zapytanie nawiązujemy dwukrotnie połączenie z HTTP API. W Pierwszym rządaniu otwieramy transakcję, w drugim zatwierdzamy transakcję. W poniższym przykłądzie wybieramy parametry węzła 0.
Otwieramy transakcję i wysyłamy polecenie:
-
POST http://localhost:7474/db/neo4j/tx
-
Accept: application/json;charset=UTF-8
-
Content-Type: application/json
{"statements" : [ {"statement" : "MATCH (n) WHERE id(n) = $nodeId RETURN n","parameters" : {"nodeId" : 2}} ]}
W rezultacie HTTP API odpowie:
{"results":[],"errors":[],"commit":"http://localhost:7474/db/neo4j/tx/18/commit","transaction":{"expires":"Fri, 2 Oct 2060 15:49:42 GMT"}}
Obiekt 'commit' odpowiedzi zawiera URL pod który należy wysłać następne zapytania by potwierdzić transakcje. Mamy na to 60 sekund - możemy przedłużyć sesję transakcji wysyłając np puste zapytanie.
Zatem by zatwierdzić transakcję, łączymy się raz jeszcze z API pod wskazanym adresem.
Powodzenia!