GeoServer – Layerpublizierung und Umbenennung über die REST-Schnittstelle

In einem unserer aktuellen Projekte existierte die Anforderung, über 300 verschiedene Layer aus einer Datenbank im GeoServer zu publizieren und deren Namen individuell anzupassen. Der erste Gedanke eines Entwicklers bei einem solchen Auftrag ist üblicherweise: „Wie löse ich mein Problem möglichst automatisiert und einfach reproduzierbar?“. Denn: Das manuelle Publizieren und Konfigurieren von etwa 300 Layern in der GeoServer GUI ist bei dieser Menge sehr zeitintensiv! Glücklicherweise bietet der GeoServer eine REST-Schnittstelle, die wir bereits an anderer Stelle in unserem SHOGun-Framework nutzen. Mit der Schnittstelle können viele Operationen, die über die Benutzeroberfläche vorgenommen werden, auch automatisiert vorgenommen werden. Eine Übersicht der REST-Schnittstelle bietet die sehr gute Dokumentation des GeoServers, die auch einige praktische Beispiele und Aufrufe für die REST-Schnittstelle beinhaltet. Schnell war der passende Code gefunden, um einen Layer eines bestimmten Datastores zu publizieren:

Der Einfachheit halber wird in diesen Beispielen das Kommandzeilen-Tool curl verwendet, die Aufrufe sind aber problemlos in fast jeder Programmiersprache über einen HTTP Request, oder auch über den Java-basierten GeoServer Manager möglich. Durch diesen Aufruf kann eine Datenbanktabelle, die eine Geometriespalte enthält, als Layer publiziert werden. Der etwas schwierige Teil folgt, sobald man den nun publizierten Layer editieren möchte, speziell den Namen. In unserem Falle wollten wir nicht den Namen der Tabelle als Layernamen verwenden, fanden aber über die Dokumentation zunächst keinen Hinweis, wie der GeoServer zwischen dem Namen zur reinen Anzeige und dem Namen, der als Referenz zur Datenbanktabelle genutzt wird, unterscheidet. Beispiele oder Hinweise ließen sich in der Dokumentation dazu nicht finden. Nach einer Recherche im Quellcode des GeoServers über GitHub fanden sich zwei entscheidende Hinweise, nämlich die Methoden getName() und getNativeName(). Daraus ergab sich logischerweise die folgende Codezeile:

Das ganze im Code in einer Schleife verpackt konnte dann genutzt werden, um auf „Knopfdruck“ hunderte Layer zu publizieren und umzubenennen.