{"action":"created","comment":{"url":"https://api.github.com/repos/adessoAG/devblog/pulls/comments/228937080","pull_request_review_id":169287005,"id":228937080,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIyODkzNzA4MA==","diff_hunk":"@@ -0,0 +1,145 @@\n+---\n+layout: [post, post-xml]              \n+title:  \"Neo4j – Ein Einblick in die Welt der Graphdatenbanken\"        \n+date:   2018-10-17 19:15              \n+modified_date: 2018-10-28 15:40                        \n+author: shsanayei                     \n+categories: [Softwareentwicklung]             \n+tags: [Graphdatenbanken, Neo4j]\n+---\n+Es gibt viele komplexe Daten, die miteinander in Beziehung stehen. \n+Um diese Daten auf eine Datenbank abzubilden, existieren verschiedene Technologien, unter denen sich die relationalen Datenbanken und Graphdatenbanken etabliert haben.\n+Letztere, wie Neo4j, bieten viele Vorteile gegenüber von relationalen Datenbanken, die es wert sind näher betrachtet zu werden.\n+\n+Relationale Datenbanken halten Daten in Tabellen und bilden Beziehungen mit Fremdschlüsseln ab. \n+Bei der Abfrage dieser Daten sind oft mehrere Tabellen involviert. \n+Das zugehörige SQL-Statement kann daher mehrere JOIN-Operationen enthalten, um in einer großen Datenstruktur korrekte Ergebnisse zu liefern. \n+Das Problem besteht darin, dass dabei die Beziehungen erst zur Laufzeit der Abfrage ermittelt werden. \n+Die dafür verwendeten JOIN-Operationen verbrauchen viel Speicher und CPU-Leistung. \n+Das führt dazu, dass eine Abfrage, abhängig von der Größe der Abfrage und der Anzahl an Joins, mehrere Minuten bis Stunden dauern kann. \n+Die Performanz und Effizienz leiden darunter. \n+\n+Eine alternative Lösung für dieses Problem bieten Graphendatenbanken. \n+Sie bilden Beziehungen zwischen Elementen effektiver ab und erlauben dadurch effiziente und performante Datenabfragen. Neo4j ist dabei der bekannteste und verbreitetste Vertreter dieser Kategorie.\n+\n+# Neo4j\n+[Neo4j Inc.](https://neo4j.com) ist das Unternehmen, das hinter der gleichnamigen Graphdatenbank steckt und wurde von Emil Eifrem und Johan Svensson 2007 gegründet. \n+Die Datenbank hatte seine Anfänge im Jahr 2000 als die Gründer mit Performanzproblemen mit relationalen Datenbanken zu kämpfen hatten. \n+Die erste offizielle Version wurde 2010 veröffentlicht. \n+Das Unternehmen hat seinen Hauptsitz in Sillicon Valley und verfügt weltweit über mehrere Zweigstellen, unter anderem in München. \n+\n+Neo4j ist eine Open Source Software, die in zwei Lizenzvarianten angeboten wird. Zum einen gibt es die Community Edition, die unter der [GPL v3 Lizenz](http://www.gnu.org/licenses/quick-guide-gplv3.html) läuft. \n+Diese Version ist sehr gut geeignet für private, kleinere oder Unternehmensinterne Projekte. \n+Zum anderen gibt es die Enterprise Edition. Sie ist für größere Projekte, die unter anderem eine hohe Verfügbarkeit und Sicherheit benötigen geeignet. \n+Diese Version besitzt zusätzlich zur GPL v3 auch die [AGPL v3](https://www.gnu.org/licenses/agpl-3.0.en.html) Lizenz.\n+\n+# Datenbank modellieren\n+Ein Graph besteht aus Knoten und Kanten. \n+Die Knoten haben durch die Kanten eine Beziehung zueinander. \n+Die Kanten sind gerichtete Pfeile. Um die Beziehung zwischen Schauspielern, Regisseuren und Filmen zu modellieren, kann man diese ganz einfach auf ein Whiteboard als Graphen zeichnen. \n+Dabei bilden „Person“ und „Movie“ die Knoten und „ACTED_IN“ und „DIRECTED“ die Kanten des Graphen. \n+Diese können zusätzlich Eigenschaften haben:\n+\n+![Neo4j Graph](/assets/images/posts/neo4j-ein-einblick-in-die-welt-der-graphdatenbanken/1-neo4j-graph.png)\n+\n+In Neo4j werden Beziehungen nach diesem Schema abgebildet. \n+Es ist sehr einfach und intuitiv. Man zeichnet auf einem Blatt Papier oder einer Tafel das Datenbankmodell als Graph, welcher später meist für die Datenbank übernommen werden kann.\n+Die Knoten und Kanten einer Graphdatenbank besitzen zusätzliche Eigenschaften. \n+Zum einen sind das Labels wie „:Person“,  „:Movie“ oder „:ACTED_IN“, zum anderen Properties, die aus Key-/Value-Paaren bestehen. Knoten können beliebig viele Labels und Properties haben, Kanten nur ein Label und beliebig viele Properties. \n+Auf diese Weise lassen sich komplexe Zusammenhänge zwischen Daten als Graph darstellen.\n+\n+# Cypher - Die Abfragesprache von Neo4j\n+\n+Neo4j hat eine eigene deklarative Abfragesprache, die sich Cypher nennt. \n+Sie orientiert sich an SQL und ist einfach aufgebaut. \n+Die Syntax besteht zum Teil aus „ASCII-Kunst“, die Knoten und Kanten repräsentiert: \n+* Knoten werden als `(...)` dargestellt\n+* Kanten werden als `-[...]->` dargestellt\n+\n+Innerhalb der Klammerung stehen Labels und Properties, die dann die gesuchten Daten genauer spezifizieren können.\n+\n+## Abfragen\n+Möchte man die Beziehung zwischen Martin Freeman und allen Filmen, in denen er mitgespielt hat, abfragen, sieht die Syntax wie folgt aus:\n+\n+```graphql\n+MATCH (martin:Person)-[:ACTED_IN]->(martinMovies:Movie)\n+WHERE p.name = \"Martin Freeman\"\n+RETURN p,m;\n+```\n+\n+Als Ergebnis wird ein Subgraph zurückgegeben, der die gesuchte Beziehung aus dem Gesamtgraphen zeigt.\n+\n+![Neo4j Subgraph](/assets/images/posts/neo4j-ein-einblick-in-die-welt-der-graphdatenbanken/2-neo4j-subgraph.png)\n+ \n+Das gleiche Ergebnis kann man auch erreichen, indem man auf die explizite WHERE-Klausel verzichtet und diese direkt in dem MATCH-Befehl angibt:\n+\n+```graphql\n+MATCH (martin:Person {name: \"Martin Freeman\"})-[:ACTED_IN]->(martinMovies:Movie) RETURN martin,martinMovies;\n+```\n+\n+Möchte man statt dem Graphen eine tabellarische Darstellung des Ergebnisses erhalten, kann dies mit folgender Query erreicht werden:\n+\n+```graphql\n+MATCH (martin:Person {name: \"Martin Freeman\"})-[:ACTED_IN]->(martinMovies:Movie)\n+RETURN martinMovies.title, martinMovies.released;\n+```\n+\n+Das Ergebnis der Abfrage wird als Tabelle zurückgegeben:\n+\n+\n+![Ergebnistabelle](/assets/images/posts/neo4j-ein-einblick-in-die-welt-der-graphdatenbanken/query-result-table.png)             \n+\n+Die verwendeten Klauseln haben folgende Bedeutung:\n+\n+* `MATCH`: Der Ausdruck gibt an, nach welchem Muster in der Datenbank gesucht werden soll (wie das `SELECT` in SQL).\n+* `WHERE`: Diese Klausel definiert Bedingungen für den MATCH-Befehl, um die Suche zu präzisieren.\n+* `RETURN`: Definiert was im Abfrageergebnis hinzugefügt werden soll.\n+\n+Mit Cypher ist es auch möglich komplexe, verschachtelte Abfragen zu formulieren. \n+Es lassen sich natürlich auch Knoten und Kanten hinzufügen, aktualisieren und löschen. \n+Sie bietet außerdem eine Vielzahl von Funktionen wie *size()*, *count()* und *avg()* an, die in der Anwendungsentwicklung sinnvoll eingesetzt werden können.\n+Das [Cypher-Entwickler-Handbuch](https://neo4j.com/docs/developer-manual/current/cypher/functions/) verfügt über eine Liste aller Funktionen.\n+\n+## Datensätze einfügen\n+\n+Mit `CREATE` kann man neue Knoten und Beziehungen hinzufügen. \n+Das folgende Beispiel fügt den Film „Black Panther“, in dem Martin Freeman 2018 gespielt hat, als Knoten hinzu. \n+Anschließend wird eine neue Beziehung zwischen beiden Knoten erzeugt. \n+Das Ergebnis wird in die Variable „path“ gespeichert und im `RETURN` ausgegeben:\n+\n+```graphql\n+MATCH (martin:Person)\n+WHERE martin.name = \"Martin Freeman\"\n+CREATE path = (martin)-[:ACTED_IN {role: \"Everett K. Ross\"}]->(:Movie {title: \"Black Panther\", released: 2018})\n+RETURN path;\n+```\n+\n+![Neu erzeugter Knoten](/assets/images/posts/neo4j-ein-einblick-in-die-welt-der-graphdatenbanken/3-create-node.png)\n+\n+# Vorteile von Neo4j\n+**Einfachheit:** Neo4j ist durch die Graphdarstellung sehr anschaulich und intuitiv. \n+Ein auf einem Whiteboard gezeichneter Graph kann meist 1:1 in die Datenbank übernommen werden. \n+Die Abfragesprache Cypher ist durch die „ASCII-Kunst“ verständlich gehalten. \n+\n+**Performanz:** Einfache und komplexe Suchabfragen werden in Echtzeit ausgeführt. \n+Die Abfragezeit verhält sich proportional zur Ergebnismenge und nicht zur Gesamtdatenmenge und führt dazu, dass ein und dieselbe Abfrage ähnlich schnell ist, unabhängig von der Gesamtmenge der Daten in der Datenbank. Folglich führt dies zu konstant schnellen Abfragen, Vermeidung von Join-Problemen und nur teilweiser Verarbeitung der gesamten Datenmenge.\n+\n+**Agilität:** Neue Strukturen lassen sich gut in den Graphen integrieren und existierende Daten können erweitert werden ohne bestehende Applikationen dadurch zu beeinflussen. ","path":"_posts/2018-10-17-neo4j-ein-einblick-in-die-welt-der-graphdatenbanken.md","position":127,"original_position":127,"commit_id":"be49e68e0a5ec4107c35d435e592afea2d108125","original_commit_id":"be49e68e0a5ec4107c35d435e592afea2d108125","user":{"login":"florianluediger","id":7590163,"node_id":"MDQ6VXNlcjc1OTAxNjM=","avatar_url":"https://avatars2.githubusercontent.com/u/7590163?v=4","gravatar_id":"","url":"https://api.github.com/users/florianluediger","html_url":"https://github.com/florianluediger","followers_url":"https://api.github.com/users/florianluediger/followers","following_url":"https://api.github.com/users/florianluediger/following{/other_user}","gists_url":"https://api.github.com/users/florianluediger/gists{/gist_id}","starred_url":"https://api.github.com/users/florianluediger/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/florianluediger/subscriptions","organizations_url":"https://api.github.com/users/florianluediger/orgs","repos_url":"https://api.github.com/users/florianluediger/repos","events_url":"https://api.github.com/users/florianluediger/events{/privacy}","received_events_url":"https://api.github.com/users/florianluediger/received_events","type":"User","site_admin":false},"body":"```suggestion\r\n**Agilität:** Neue Strukturen lassen sich gut in den Graphen integrieren und existierende Daten können erweitert werden, ohne bestehende Applikationen dadurch zu beeinflussen. \r\n```","created_at":"2018-10-29T14:02:50Z","updated_at":"2018-10-29T14:04:00Z","html_url":"https://github.com/adessoAG/devblog/pull/67#discussion_r228937080","pull_request_url":"https://api.github.com/repos/adessoAG/devblog/pulls/67","author_association":"MEMBER","_links":{"self":{"href":"https://api.github.com/repos/adessoAG/devblog/pulls/comments/228937080"},"html":{"href":"https://github.com/adessoAG/devblog/pull/67#discussion_r228937080"},"pull_request":{"href":"https://api.github.com/repos/adessoAG/devblog/pulls/67"}}},"pull_request":{"url":"https://api.github.com/repos/adessoAG/devblog/pulls/67","id":223741496,"node_id":"MDExOlB1bGxSZXF1ZXN0MjIzNzQxNDk2","html_url":"https://github.com/adessoAG/devblog/pull/67","diff_url":"https://github.com/adessoAG/devblog/pull/67.diff","patch_url":"https://github.com/adessoAG/devblog/pull/67.patch","issue_url":"https://api.github.com/repos/adessoAG/devblog/issues/67","number":67,"state":"open","locked":false,"title":"new post about neo4j","user":{"login":"shsanayei","id":28383530,"node_id":"MDQ6VXNlcjI4MzgzNTMw","avatar_url":"https://avatars3.githubusercontent.com/u/28383530?v=4","gravatar_id":"","url":"https://api.github.com/users/shsanayei","html_url":"https://github.com/shsanayei","followers_url":"https://api.github.com/users/shsanayei/followers","following_url":"https://api.github.com/users/shsanayei/following{/other_user}","gists_url":"https://api.github.com/users/shsanayei/gists{/gist_id}","starred_url":"https://api.github.com/users/shsanayei/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/shsanayei/subscriptions","organizations_url":"https://api.github.com/users/shsanayei/orgs","repos_url":"https://api.github.com/users/shsanayei/repos","events_url":"https://api.github.com/users/shsanayei/events{/privacy}","received_events_url":"https://api.github.com/users/shsanayei/received_events","type":"User","site_admin":false},"body":"Blogartikel über Neo4j.\r\n\r\nWenn du einen Pull-Request stellst, teile uns bitte deine Änderungen mit, indem du die unten angegebene Publish-Checkliste nutzt. \r\n\r\n# Publish Checkliste\r\n\r\n- **Meta** (abzuhaken durch den Autor)\r\n  - [x] [Artikeldatei am richtigen Ort abgelegt](https://github.com/adessoAG/devblog/blob/master/examples/2017-08-10-blog-post-guide.md#dateiname-und-ablageort)\r\n  - [x] [Autoreninfo gepflegt](https://github.com/adessoAG/devblog/blob/master/examples/2017-08-10-blog-post-guide.md#autoren-informationen)\r\n  - [Metadaten gepflegt:](https://github.com/adessoAG/devblog/blob/master/examples/2017-08-10-blog-post-guide.md#metadaten)\r\n    - [x] \"title\" vergeben\r\n    - [x] \"author\" angegeben\r\n    - [x] \"categories\" enthält maximal eine der Hauptkategorien (Java, Microsoft, Methodik, Architekturen, Softwareentwicklung, Business & People)\r\n    - [x] \"tags\" enthält (beliebige) passende Tags\r\n- **Text** (abzuhaken durch den Autor)\r\n  - [x] [Teaser entspricht den Vorgaben](https://github.com/adessoAG/devblog/blob/master/examples/2017-08-10-blog-post-guide.md#einleitung--teaser)\r\n  - [x] Rechtschreibung korrigiert\r\n  - [x] [Bilder sind korrekt in den Artikel eingebunden](https://github.com/adessoAG/devblog/blob/master/examples/2017-08-10-blog-post-guide.md#bilder)\r\n  - [x] [Überschriften entsprechen den Vorgaben](https://github.com/adessoAG/devblog/blob/master/examples/2017-08-10-blog-post-guide.md#%C3%9Cberschriften)\r\n  - [x] Code-Snippets wurden mit [Syntax Highlighting](https://github.com/adessoAG/devblog/blob/master/examples/2017-08-10-blog-post-guide.md#syntax-highlighting) versehen\r\n  - [x] Der Artikel wurde in der [Vorschau](https://github.com/adessoAG/devblog/blob/master/examples/2017-08-10-blog-post-guide.md#online-preview) geprüft \r\n- **Review** (abzuhaken durch den Reviewer)\r\n  - [x] Rechtschreibung korrigiert\r\n  - [x] Der Artikel wurde in der [Vorschau](https://github.com/adessoAG/devblog/blob/master/examples/2017-08-10-blog-post-guide.md#online-preview) geprüft \r\n  - [ ] CCO wurde über neuen Artikel informiert\r\n  - Date-Angaben \r\n    - [ ] stimmen im Header und im Dateinamen überein\r\n    - [ ] stehen auf dem heutigen Tag (aber in der Vergangenheit)\r\n\r\n","created_at":"2018-10-17T20:23:00Z","updated_at":"2018-10-29T14:03:59Z","closed_at":null,"merged_at":null,"merge_commit_sha":"3236d8bcce9ba20703eff0b47740a9af9ef7ad05","assignee":null,"assignees":[],"requested_reviewers":[{"login":"thombergs","id":1363578,"node_id":"MDQ6VXNlcjEzNjM1Nzg=","avatar_url":"https://avatars3.githubusercontent.com/u/1363578?v=4","gravatar_id":"","url":"https://api.github.com/users/thombergs","html_url":"https://github.com/thombergs","followers_url":"https://api.github.com/users/thombergs/followers","following_url":"https://api.github.com/users/thombergs/following{/other_user}","gists_url":"https://api.github.com/users/thombergs/gists{/gist_id}","starred_url":"https://api.github.com/users/thombergs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/thombergs/subscriptions","organizations_url":"https://api.github.com/users/thombergs/orgs","repos_url":"https://api.github.com/users/thombergs/repos","events_url":"https://api.github.com/users/thombergs/events{/privacy}","received_events_url":"https://api.github.com/users/thombergs/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/adessoAG/devblog/pulls/67/commits","review_comments_url":"https://api.github.com/repos/adessoAG/devblog/pulls/67/comments","review_comment_url":"https://api.github.com/repos/adessoAG/devblog/pulls/comments{/number}","comments_url":"https://api.github.com/repos/adessoAG/devblog/issues/67/comments","statuses_url":"https://api.github.com/repos/adessoAG/devblog/statuses/be49e68e0a5ec4107c35d435e592afea2d108125","head":{"label":"shsanayei:master","ref":"master","sha":"be49e68e0a5ec4107c35d435e592afea2d108125","user":{"login":"shsanayei","id":28383530,"node_id":"MDQ6VXNlcjI4MzgzNTMw","avatar_url":"https://avatars3.githubusercontent.com/u/28383530?v=4","gravatar_id":"","url":"https://api.github.com/users/shsanayei","html_url":"https://github.com/shsanayei","followers_url":"https://api.github.com/users/shsanayei/followers","following_url":"https://api.github.com/users/shsanayei/following{/other_user}","gists_url":"https://api.github.com/users/shsanayei/gists{/gist_id}","starred_url":"https://api.github.com/users/shsanayei/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/shsanayei/subscriptions","organizations_url":"https://api.github.com/users/shsanayei/orgs","repos_url":"https://api.github.com/users/shsanayei/repos","events_url":"https://api.github.com/users/shsanayei/events{/privacy}","received_events_url":"https://api.github.com/users/shsanayei/received_events","type":"User","site_admin":false},"repo":{"id":153493233,"node_id":"MDEwOlJlcG9zaXRvcnkxNTM0OTMyMzM=","name":"devblog","full_name":"shsanayei/devblog","private":false,"owner":{"login":"shsanayei","id":28383530,"node_id":"MDQ6VXNlcjI4MzgzNTMw","avatar_url":"https://avatars3.githubusercontent.com/u/28383530?v=4","gravatar_id":"","url":"https://api.github.com/users/shsanayei","html_url":"https://github.com/shsanayei","followers_url":"https://api.github.com/users/shsanayei/followers","following_url":"https://api.github.com/users/shsanayei/following{/other_user}","gists_url":"https://api.github.com/users/shsanayei/gists{/gist_id}","starred_url":"https://api.github.com/users/shsanayei/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/shsanayei/subscriptions","organizations_url":"https://api.github.com/users/shsanayei/orgs","repos_url":"https://api.github.com/users/shsanayei/repos","events_url":"https://api.github.com/users/shsanayei/events{/privacy}","received_events_url":"https://api.github.com/users/shsanayei/received_events","type":"User","site_admin":false},"html_url":"https://github.com/shsanayei/devblog","description":"adesso Developer Blog","fork":true,"url":"https://api.github.com/repos/shsanayei/devblog","forks_url":"https://api.github.com/repos/shsanayei/devblog/forks","keys_url":"https://api.github.com/repos/shsanayei/devblog/keys{/key_id}","collaborators_url":"https://api.github.com/repos/shsanayei/devblog/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/shsanayei/devblog/teams","hooks_url":"https://api.github.com/repos/shsanayei/devblog/hooks","issue_events_url":"https://api.github.com/repos/shsanayei/devblog/issues/events{/number}","events_url":"https://api.github.com/repos/shsanayei/devblog/events","assignees_url":"https://api.github.com/repos/shsanayei/devblog/assignees{/user}","branches_url":"https://api.github.com/repos/shsanayei/devblog/branches{/branch}","tags_url":"https://api.github.com/repos/shsanayei/devblog/tags","blobs_url":"https://api.github.com/repos/shsanayei/devblog/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/shsanayei/devblog/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/shsanayei/devblog/git/refs{/sha}","trees_url":"https://api.github.com/repos/shsanayei/devblog/git/trees{/sha}","statuses_url":"https://api.github.com/repos/shsanayei/devblog/statuses/{sha}","languages_url":"https://api.github.com/repos/shsanayei/devblog/languages","stargazers_url":"https://api.github.com/repos/shsanayei/devblog/stargazers","contributors_url":"https://api.github.com/repos/shsanayei/devblog/contributors","subscribers_url":"https://api.github.com/repos/shsanayei/devblog/subscribers","subscription_url":"https://api.github.com/repos/shsanayei/devblog/subscription","commits_url":"https://api.github.com/repos/shsanayei/devblog/commits{/sha}","git_commits_url":"https://api.github.com/repos/shsanayei/devblog/git/commits{/sha}","comments_url":"https://api.github.com/repos/shsanayei/devblog/comments{/number}","issue_comment_url":"https://api.github.com/repos/shsanayei/devblog/issues/comments{/number}","contents_url":"https://api.github.com/repos/shsanayei/devblog/contents/{+path}","compare_url":"https://api.github.com/repos/shsanayei/devblog/compare/{base}...{head}","merges_url":"https://api.github.com/repos/shsanayei/devblog/merges","archive_url":"https://api.github.com/repos/shsanayei/devblog/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/shsanayei/devblog/downloads","issues_url":"https://api.github.com/repos/shsanayei/devblog/issues{/number}","pulls_url":"https://api.github.com/repos/shsanayei/devblog/pulls{/number}","milestones_url":"https://api.github.com/repos/shsanayei/devblog/milestones{/number}","notifications_url":"https://api.github.com/repos/shsanayei/devblog/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/shsanayei/devblog/labels{/name}","releases_url":"https://api.github.com/repos/shsanayei/devblog/releases{/id}","deployments_url":"https://api.github.com/repos/shsanayei/devblog/deployments","created_at":"2018-10-17T17:00:01Z","updated_at":"2018-10-28T14:56:38Z","pushed_at":"2018-10-28T14:56:36Z","git_url":"git://github.com/shsanayei/devblog.git","ssh_url":"git@github.com:shsanayei/devblog.git","clone_url":"https://github.com/shsanayei/devblog.git","svn_url":"https://github.com/shsanayei/devblog","homepage":"https://www.adesso.de/de/news/blog/index.jsp","size":8493,"stargazers_count":0,"watchers_count":0,"language":"JavaScript","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"mit","name":"MIT License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit","node_id":"MDc6TGljZW5zZTEz"},"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"adessoAG:master","ref":"master","sha":"19e99b69a627990902a4ae70330cc3013139e9f0","user":{"login":"adessoAG","id":1710422,"node_id":"MDEyOk9yZ2FuaXphdGlvbjE3MTA0MjI=","avatar_url":"https://avatars1.githubusercontent.com/u/1710422?v=4","gravatar_id":"","url":"https://api.github.com/users/adessoAG","html_url":"https://github.com/adessoAG","followers_url":"https://api.github.com/users/adessoAG/followers","following_url":"https://api.github.com/users/adessoAG/following{/other_user}","gists_url":"https://api.github.com/users/adessoAG/gists{/gist_id}","starred_url":"https://api.github.com/users/adessoAG/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/adessoAG/subscriptions","organizations_url":"https://api.github.com/users/adessoAG/orgs","repos_url":"https://api.github.com/users/adessoAG/repos","events_url":"https://api.github.com/users/adessoAG/events{/privacy}","received_events_url":"https://api.github.com/users/adessoAG/received_events","type":"Organization","site_admin":false},"repo":{"id":97385250,"node_id":"MDEwOlJlcG9zaXRvcnk5NzM4NTI1MA==","name":"devblog","full_name":"adessoAG/devblog","private":false,"owner":{"login":"adessoAG","id":1710422,"node_id":"MDEyOk9yZ2FuaXphdGlvbjE3MTA0MjI=","avatar_url":"https://avatars1.githubusercontent.com/u/1710422?v=4","gravatar_id":"","url":"https://api.github.com/users/adessoAG","html_url":"https://github.com/adessoAG","followers_url":"https://api.github.com/users/adessoAG/followers","following_url":"https://api.github.com/users/adessoAG/following{/other_user}","gists_url":"https://api.github.com/users/adessoAG/gists{/gist_id}","starred_url":"https://api.github.com/users/adessoAG/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/adessoAG/subscriptions","organizations_url":"https://api.github.com/users/adessoAG/orgs","repos_url":"https://api.github.com/users/adessoAG/repos","events_url":"https://api.github.com/users/adessoAG/events{/privacy}","received_events_url":"https://api.github.com/users/adessoAG/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/adessoAG/devblog","description":"adesso Developer Blog","fork":false,"url":"https://api.github.com/repos/adessoAG/devblog","forks_url":"https://api.github.com/repos/adessoAG/devblog/forks","keys_url":"https://api.github.com/repos/adessoAG/devblog/keys{/key_id}","collaborators_url":"https://api.github.com/repos/adessoAG/devblog/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/adessoAG/devblog/teams","hooks_url":"https://api.github.com/repos/adessoAG/devblog/hooks","issue_events_url":"https://api.github.com/repos/adessoAG/devblog/issues/events{/number}","events_url":"https://api.github.com/repos/adessoAG/devblog/events","assignees_url":"https://api.github.com/repos/adessoAG/devblog/assignees{/user}","branches_url":"https://api.github.com/repos/adessoAG/devblog/branches{/branch}","tags_url":"https://api.github.com/repos/adessoAG/devblog/tags","blobs_url":"https://api.github.com/repos/adessoAG/devblog/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/adessoAG/devblog/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/adessoAG/devblog/git/refs{/sha}","trees_url":"https://api.github.com/repos/adessoAG/devblog/git/trees{/sha}","statuses_url":"https://api.github.com/repos/adessoAG/devblog/statuses/{sha}","languages_url":"https://api.github.com/repos/adessoAG/devblog/languages","stargazers_url":"https://api.github.com/repos/adessoAG/devblog/stargazers","contributors_url":"https://api.github.com/repos/adessoAG/devblog/contributors","subscribers_url":"https://api.github.com/repos/adessoAG/devblog/subscribers","subscription_url":"https://api.github.com/repos/adessoAG/devblog/subscription","commits_url":"https://api.github.com/repos/adessoAG/devblog/commits{/sha}","git_commits_url":"https://api.github.com/repos/adessoAG/devblog/git/commits{/sha}","comments_url":"https://api.github.com/repos/adessoAG/devblog/comments{/number}","issue_comment_url":"https://api.github.com/repos/adessoAG/devblog/issues/comments{/number}","contents_url":"https://api.github.com/repos/adessoAG/devblog/contents/{+path}","compare_url":"https://api.github.com/repos/adessoAG/devblog/compare/{base}...{head}","merges_url":"https://api.github.com/repos/adessoAG/devblog/merges","archive_url":"https://api.github.com/repos/adessoAG/devblog/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/adessoAG/devblog/downloads","issues_url":"https://api.github.com/repos/adessoAG/devblog/issues{/number}","pulls_url":"https://api.github.com/repos/adessoAG/devblog/pulls{/number}","milestones_url":"https://api.github.com/repos/adessoAG/devblog/milestones{/number}","notifications_url":"https://api.github.com/repos/adessoAG/devblog/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/adessoAG/devblog/labels{/name}","releases_url":"https://api.github.com/repos/adessoAG/devblog/releases{/id}","deployments_url":"https://api.github.com/repos/adessoAG/devblog/deployments","created_at":"2017-07-16T13:31:04Z","updated_at":"2018-10-24T08:00:27Z","pushed_at":"2018-10-28T14:56:37Z","git_url":"git://github.com/adessoAG/devblog.git","ssh_url":"git@github.com:adessoAG/devblog.git","clone_url":"https://github.com/adessoAG/devblog.git","svn_url":"https://github.com/adessoAG/devblog","homepage":"https://www.adesso.de/de/news/blog/index.jsp","size":13714,"stargazers_count":9,"watchers_count":9,"language":"JavaScript","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":31,"mirror_url":null,"archived":false,"open_issues_count":9,"license":{"key":"mit","name":"MIT License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit","node_id":"MDc6TGljZW5zZTEz"},"forks":31,"open_issues":9,"watchers":9,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/adessoAG/devblog/pulls/67"},"html":{"href":"https://github.com/adessoAG/devblog/pull/67"},"issue":{"href":"https://api.github.com/repos/adessoAG/devblog/issues/67"},"comments":{"href":"https://api.github.com/repos/adessoAG/devblog/issues/67/comments"},"review_comments":{"href":"https://api.github.com/repos/adessoAG/devblog/pulls/67/comments"},"review_comment":{"href":"https://api.github.com/repos/adessoAG/devblog/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/adessoAG/devblog/pulls/67/commits"},"statuses":{"href":"https://api.github.com/repos/adessoAG/devblog/statuses/be49e68e0a5ec4107c35d435e592afea2d108125"}},"author_association":"MEMBER"}}
{"actor":{"display_login":"florianluediger"}}