Gute Tools für die Versionierung von REST-Modellen für Java

8

Ich bin auf der Suche nach guten Tools zur Unterstützung der Änderung der Version des in REST-Diensten verwendeten Modells. Meine Traumwerkzeuge würden so etwas wie:

machen
  • Mein pojo + Version 1.0 config / transformer = & gt; Service verfügbar mit 1.0 meines Modells
  • Mein pojo + Version 1.1 config / transformer = & gt; Service verfügbar mit 1.1 meines Modells

In meinem speziellen Fall muss ich die umgekehrte Umwandlung nicht machen, da mein REST-Service nur Nachschlagen von Daten bietet und niemals Dinge speichert, aber ich habe nichts dagegen, ein Werkzeug zu benutzen, das beides macht: -)

Eine Lösung, die ich in Erwägung ziehe, ist das Hinzufügen von benutzerdefinierten Anmerkungen in meinem Pojo (Version + Name) und das Erstellen eines Code-Generators, der basierend auf der Versionsnummer JSON / XML basierend auf meinem Pojo generiert. Obwohl ich hier fühle, dass ich das Rad neu erfinde.

Bearbeiten: Hier ist ein Beispiel für eine Änderung, die von Version 1 zu Version 1.1 durchgeführt werden kann:

Version 1: Person   Vorname   Nachname

Version 1.1 Person   Vorname   Familienname, Nachname   Geburtsdatum

Wenn Sie auf die API mit Version 1.0 zugreifen, erhalten Sie das Attribut "Geburtsdatum" nicht - es ist nur in Version 1.1 verfügbar. Ich möchte Tool-Unterstützung für die Bereitstellung dieser Dienste, wo ich konfigurieren kann, dass meine pojo (die derzeit wie die 1.1-Version ist) erteilt, ich möchte eine 1.0-Version zur Verfügung stellen, die diese Werte nicht zeigt.

Andere rechtliche Änderungen am Modell könnten sein, ein Attribut zu löschen oder ein Attribut umzubenennen (oder sogar eine Entität umzubenennen).

Bearbeiten 2: Digital Joel erwähnt in einem Kommentar, dass für eine Diskussion über die Versionierung der API sollten Sie lesen Ссылка .

Der einfache Ausweg aus der Versionierung besteht natürlich darin, keine rückständigen API-Änderungen zu machen, sondern geschäftliche Änderungen, so dass dies nicht immer möglich ist. Mein Interesse ist, wie man diese Änderungen einfacher handhaben kann, daher meine Frage.

Bearbeiten 3: Ich habe nach Werkzeugen gesucht, die dem Prozess helfen könnten, aber immer noch nichts, das dies gut mit Ruhe verbindet. Hier sind die Links, die ich bisher gefunden habe:

  • Ссылка (Sieht aus wie eine Bibliothek, die bei der Serialisierung von Pojos zu xml mit Versionierung hilft)
Knubo 20.03.2012, 15:29
quelle

5 Antworten

9

Wie in einer Antwort erwähnt, sind möglicherweise keine Tools verfügbar, für die eine automatische Versionsverwaltung von APIs möglich ist.

Wir können diese Herausforderung mit zwei Schritten angehen:

1) Versionsinfo der API Es gibt viele Debatten über bewährte Verfahren. Zwei der beliebtesten sind:

%Vor%

2) Mehrere Versionen desselben Pojo mit der json / xml-Bibliothek

Sobald Versionsinfo bei uns ist, müssen wir die Ressource entsprechend generieren. Es gibt viele JSON- und XML-Bibliotheken, mit denen wir mehrere Versionen desselben Pojos verwalten und nur die erforderlichen Attribute basierend auf der Version serialisieren können. Google Gson Java-Bibliothek funktioniert gut darin. Prüfen Ссылка

%Vor%     
shashankaholic 27.03.2012, 19:27
quelle
1

Ich kenne keine Tools zur automatischen Versionierung Ihrer RESTful-API. Für eine ausführliche Diskussion über die REST-Versionierung sollten Sie Best Practices für die API-Versionierung .

Ich habe viel Zeit darauf verwendet, dies bei der Planung einer RESTful-API zu untersuchen, und wir sind zu dem Schluss gekommen, dass wir uns so weiterentwickeln werden, dass keine bahnbrechenden Änderungen auftreten. Wenn eine brechende Änderung erforderlich ist, würden wir sie als neue Ressource bereitstellen, anstatt zu versuchen, Versionsinformationen in einem benutzerdefinierten Header oder MIME-Typ zu verwenden. Aber zu Ihrer Frage, das bedeutet Arbeit auf meiner Seite, die noch mehr Ansporn ist, keine brechenden Veränderungen zu machen.

Wenn es um Tools geht, bezweifle ich ernsthaft, dass Sie etwas finden, das automatisch die erforderlichen Änderungen für die Unterstützung mehrerer Versionen Ihrer RESTful-API vornehmen kann. Es würde ein Tool erfordern, das die Unterschiede zwischen zwei Versionen Ihres Modells und alle Interaktionen in Ihrer API versteht.

Wenn Sie dem HATEOAS-Prinzip von REST entsprechen, werden alle Ziele von einem bestimmten Standort ebenfalls in die Antwort eingeschlossen. In diesem Fall könnten Sie die Spring-MVC verwenden, um die Versionsnummer beizubehalten Alle Ihre URLs erhalten einen einzigen Einstiegspunkt vom Client, aber Sie müssen weiterhin die Controller und das Modell für jede Version verwalten.

    
digitaljoel 22.03.2012 19:16
quelle
1

Dies ist nicht die Antwort, die Sie vielleicht erwarten, da ich kein externes Open-Source-Tool verwende, um das schwere Heben für mich durchzuführen. Ich benutze mein eigenes Werkzeug.

Ich benutze Jersey. Ich verwende / vx / in meinen @Path-Deklarationen enthalten.

Da REST apis Verträge darstellen, traue ich der automatischen Erstellung nicht zu. Aber ich habe ein XLST-Tool in einem nicht sehr komplexen Maven-Plugin erstellt.) Ich behalte die prägnante XML-Version bei und verwandle mich in eine Jersey-Klasse in gensrc.

Ich habe festgestellt, dass v1 bestimmte Pfad- und Matrix- / Abfrageparameter aufweist, die zu dem Zeitpunkt für das Design eindeutig sind. Wenn ich v2 entwickle, finde ich oft, dass ich zusätzliche Parameter unterstützen oder meine URLs für ein besseres Verständnis restrukturieren muss. Ich muss nur die XML-Datei ändern.

Meine Generation-Engine erstellt meine Jersey-Ebene mit MyAPIv1.java und MyAPIv2.java und kommentiert entsprechend dem Bedarf der Zeit.

Ich möchte also die Kontrolle über die Versionierung behalten und ein Auto / Werkzeug könnte schädlich sein.

Auch hier ist die Verwendung einer Spezifikation eine gute Möglichkeit, dünne Schichten vollständig zu steuern, jedoch nicht vollständig zu implementieren.

Also keine Zigarre hier, aber das könnte hilfreich sein.

    
Jaime Garza 28.03.2012 15:40
quelle
0

nur ein Gedanke, aber wäre es nicht schöner, Ihre API rückwärts kompatibel zu machen; Dann brauchen Sie nur die Versionierung für Ihr Code-Repository und das ist viel weniger Aufwand?

    
Tom 22.03.2012 19:12
quelle
-1

Sprichst du über etwas, das dies für dich in der Entwicklungswelt (Erhalt von Versionen deiner API für die Weitergabe an Benutzer) oder in der Live-Server-Welt (Inhaltsverhandlung zur Laufzeit) ausliefern wird?

Für die ehemalige, betrachten Sie Tools wie Maven, Efeu, Gradle .. das sind, was sie sind. Ich persönlich benutze Maven, weil es das ist, das ich am besten kenne, aber alle erlauben es Ihnen, JAR-Dateien mit Versionen für genau diesen Zweck zu veröffentlichen.

    
Rick Mangi 20.03.2012 15:49
quelle

Tags und Links