Zeus-Commons-APIs: Ihr Werkzeug für spezialisierte Backend-Aufgaben

Image licensed by Ingram Image/adpic

Einleitung

Backend-Entwicklung ist ein Feld mit vielen Herausforderungen, sei es komplexe SQL-Abfragen, Datenintegration oder die Modernisierung von Legacy-Systemen. Zeus-Commons-APIs möchte diese Herausforderungen einfacher gestalten. In diesem Blogartikel gehen wir darauf ein, wie dieses spezialisierte Tool Ihnen dabei helfen kann.

Was ist Zeus-Commons-APIs?

Zeus-Commons-APIs bietet eine zielgerichtete Lösung für Ihre Backend-Services. Es erlaubt die Erstellung von bis zu vierfach verschachtelten SQL-Abfragen, einfach über REST oder Konsole. Die Anwendung ist schlank, läuft auf Spark Java und gibt Daten in JSON- oder XML-Formaten zurück, mit Verschachtelung bis zu vier Ebenen.

Wichtiger Hinweis: Für den Produktiveinsatz sind zusätzliche Maßnahmen gegen SQL-Injection erforderlich.

Mögliche Anwendungsfälle

  • API-Backend-Entwicklung: Perfekt für die Entwicklung von APIs, die komplexe Datenmodelle unterstützen müssen.
  • Integration verschiedener Datenquellen: Ideal, wenn Sie Daten aus unterschiedlichen Quellen in einem Format konsolidieren möchten.
  • Modernisierung von Legacy-Systemen: Etwa für die Aktualisierung eines altgedienten System-i (AS/400).

Wie es funktioniert

Endpunkte und Metadaten

Das Tool verfügt über zwei Hauptendpunkte:

  • GET localhost:4567/json: Datenrückgabe im JSON-Format.
  • GET localhost:4567/xml: Datenrückgabe im XML-Format.

Die Ausgabe von Metadaten kann ein- oder ausgeschaltet werden, indem das Feld includeMetadata im JSON-Body auf true oder false gesetzt wird.

Bauen der Anwendung als „Fat“-Jar

mvn clean package

Starten der Anwendung als REST-Service

java -cp zeus-commons-0.0.1-SNAPSHOT.jar de.zeus.commons.provider.Provider "REST" "config/jdbc.properties" "config/spark.properties"

Im Modis „REST“ wartet die Anwendung auf eingehende Requests auf dem konfigurierten Port.

Starten der Anwendung als CONSOLE-Anwendung

java -cp zeus-commons-0.0.1-SNAPSHOT.jar de.zeus.commons.provider.Provider "CONSOLE" "config/jdbc.properties" "[json-query-objects]" "[application/xml | application/json]"

Im Modus „CONSOLE“ muss das JSON-Query-Object direkt beim Aufruf mit angegeben werden, ebenso das gewünschte Ausgabeformt, application/xml oder application/json.

Datenabfrage und Datenverschachtelung

Ein starkes Feature ist die Unterstützung von Datenverschachtelungen bis zu vier Ebenen, die die Abbildung komplexer Abfragebeziehungen ermöglicht. Die Idee der verschachtelten Abfragen ist, mehrere Tabellen in einer logischen Reihenfolge zu durchsuchen, um komplexe Informationen einfach abzurufen.

Beispiel Request

{"query": {
  "name": "agents",
  "statement": "select * from agents where agent_code = 'A105'",
  "subquery": {
    "name": "orders",
    "statement": "select * from orders where agent_code = '[$agent_code]'",
    "subquery": {
      "name": "customers",
      "statement": "select * from customers where cust_code = '[$cust_code]'",
      "subquery": {
        "name": "revenue",
        "statement": "select * from agent_revenue where agent_code = '[$agent_code]'"
      }
    }
  }
},
"includeMetadata": false
}

Beispiel JSON Response (gekürzt und ohne Meta-Daten)

{"contentData": {
  "agents": {
    "A105": {
      "agent_code": "A105",
      "agent_name": "James Johnson",
      "working_area": "London",
      "more": "..."
    }
  },
  "orders": {
    "5": {
      "ord_num": "5",
      "ord_amount": "3000.00",
      "advance_amount": "1300.00",
      "more": "...",
      "customers": {
        "C105": {
          "cust_code": "C105",
          "cust_name": "Emily Smith",
          "cust_city": "London",
          "more": "...",
          "revenue": {
            "A105": {
              "agent_code": "A105",
              "agent_name": "James Johnson",
              "cumulative_revenue": "7700.00",
              "more": "..."
            }
          }
        }
      }
    }
  }
}

Beispiel XML Response (gekürzt und ohne Meta-Daten)

<?xml version="1.0" encoding="UTF-8"?>
<result>
  <contentData>
    <agents>
      <entity>
        <agent_code>A105</agent_code>
        <agent_name>James Johnson</agent_name>
        <working_area>London</working_area>
        <more>...</more>
        <orders>
          <entity>
            <ord_num>5</ord_num>
            <ord_amount>3000.00</ord_amount>
            <advance_amount>1300.00</advance_amount>
            <more>...</more>
            <customers>
              <entity>
                <cust_code>C105</cust_code>
                <cust_name>Emily Smith</cust_name>
                <cust_city>London</cust_city>
                <more>...</more>
                <revenue>
                  <entity>
                    <agent_code>A105</agent_code>
                    <agent_name>James Johnson</agent_name>
                    <cumulative_revenue>7700.00</cumulative_revenue>
                    <more>...</more>
                    </entity>
                    </revenue>
                </entity>
            </customers>
          </entity>
        </orders>
      </entity>
    </agents>
  </contentData>
</result>

GitHub-Repo

Code und Testdaten sind auf GitHub verfügbar.

Fazit

Zeus-Commons-APIs ist ein Tool mit klarem Fokus, das jedoch vielfältige Einsatzmöglichkeiten bietet. Es nimmt Ihnen spezielle Backend-Aufgaben der Datenextraktion und Konvertierung ab und lässt Ihnen Raum für Flexibilität, ohne unnötigen Overhead.

Lizenz

Das Projekt steht unter der Apache 2.0-Lizenz zur Verfügung.