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:
machenIn 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:
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% 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.
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.
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.
Tags und Links java rest model data-migration