Seite 1 von 2

Design-Entwurf: Allgemeine REST-API für Schreibzugriff auf durch PGDBE benutzte ISAM Datenbanken

Verfasst: Di, 21. Mär 2023 12:22
von dtmackenzie
Begründung

Dies ist entstanden auf Grund von Schreibzugriff auf pgdbe-Datenbank für Programme, die nicht in Xbase++ geschrieben sind (z.B. in C#) und Using SQL INSERT and UPDATE with ISAM emulating tables, in particular with indexed columns.

Microservices sind der Weg in die Zukunft, das hat Alaska klar gemacht. Idealerweise wäre Geschäftslogik immer durch eine geeignete REST-API zur Verfügung gestellt, die externe (vielleicht nicht in Xbase++ geschriebene) Anwendungen müssten sich nicht mit der internen Struktur von ISAM-Datenbanken befassen. Dann wäre sowas wie das hier weder nötig noch wünschenswert, das ist mir klar.

Unter Umständen kann aber, zumindest für eine Übergangszeit, die Notwendigkeit vorkommen. Es gibt einige Gründe, warum nicht immer gleich Geschäftslogik-basierte APIs implementiert werden können, einschließlich:
  1. Fehlende Xbase++ Programmierer-Kapazität
  2. Zeitdruck
  3. Ändernde Anforderungen
  4. Prototyp-Entwicklungen durch nicht-Xbase++ Programmierer
    ...
Und insbesondere Kombinationen aus solchen Gründen, wie sie so oft vorkommen.

Aber selbst wenn die externe Anwendungen doch die Struktur der Datenbank kennen (müssen), und direkten Lesezugriff für SELECT haben, kann es zumindest für Schreibzugriffe vorteilhaft sein, diese durch eine allgemeine REST-API anstatt direkt durch SQL UPDATE bzw. INSERT zu machen:
  1. Die Anwendungen benutzen dann schon zumindest teilweise REST-Technologie, was eine spätere Umzug auf Geschäftslogik-basierte APIs wenn vorhanden begünstigt.
  2. Die potentielle Probleme mit kurzzeitig inkonsistente Indexen werden vermieden.
  3. Einige ISAM-implementationsspezifische Details (wie Locking oder Versionierung) können standardmäßig behandelt werden, solange es nur jeweils um einen einzelnen Datensatz geht.
    ...
Beide Listen sind vermutlich unvollständig, aber der Wunsch nach so einer API erscheint mir dadurch schon gerechtfertigt.


Entwurf

Der Microservice sollte als Class implementiert werden. Anwendungsspezifischer Code soll durch Vererbung implementiert werden: Datenbankverbindung bzw. das Öffnen (USE) der Tabellen, anwendungsspezifische Prüfungen, Logging u.s.w.

Als REST-Laie, folgende Requests fallen mir ein:

Code: Alles auswählen

GET url/tablename/recno		GET würde ich zumindest in der ersten Implemention weglassen. Insbesondere die ?-Variante 
GET url/tablename?...		wäre schwer zu definieren und kann kaum mit der Macht eines SQL SELECTs mithalten.
POST url/tablename		Anstatt SQL INSERT
PATCH url/tablename/recno	Anstatt SQL UPDATE
DELETE url/tablename/recno	Als Xbase++ DELETE implementiert
DELETE (und GET falls implementiert) haben keinen Body, aber der Body des Requests für POST und PATCH, und auch der Response-Body für alle Requests, kann im Gründe genommen immer fast das gleiche Format haben, so wie:

Code: Alles auswählen

{
    "ErrorCode" : 0,
    "ErrorMessage" : "",
    "TableName" : "",
    "RecNo" : 0,
    "RowVersion" : 0,
    "Fields" :
    {
        F1 : 0,
        F2 : "",
        ...
    }
}
Das sollte vielleicht als JSON Schema definiert werden, ist aber hier erstmal nur kurz skizziert.
Alles kommt im Response zurück: Auch für DELETE sollte der vorherige Inhalt des Datensatzes zurückkommen.
ErrorCode bis RecNo sollten weggelassen werden für POST und PATCH Requests.

Im Detail:
  • ErrorCode: Ist wahrscheinlich überflüssig, vermutlich sollte stattdessen der HTTP Fehlercode benutzt werden.
    Allerdings sollten spezifische Werte zurückgegeben werden für Fälle wie: TableName existiert nicht; Datensatz existiert nicht bzw. wurde gelöscht; RLOCK() für Datensatz scheitert; RowVersion stimmt nicht überein (sollte übrigens auch KeyVersion geprüft werden?); Feld existiert nicht; Feldinhalt vom falschen Typ (konnte nicht konvertiert werden);...
    Dazu kommen bestimmt einige mehr, potentiell auch anwendungsspezifische.
  • ErrorMessage: Auf Englisch als Hilfe für den Programmierer bzw. mit zusätlichen Details, z.B. welche Felder fehlerhaft sind und warum.
  • TableName: Der Tabellenname so wie in der Postgres Datenbank.
  • RecNo: Entspricht RECNO() in Xbase++ bzw __record im SQL SELECT.
  • RowVersion: Der zu erwartende/prüfende Wert von __rowversion bei POST und PATCH bzw. der aktuelle/resultierende Wert im Response.
    Es ist mir noch unklar, ob vielleicht auch __keyversion geprüft werden soll.
    Es werden übrigens über diese Schnittstelle keine bleibende Locks gesetzt.
  • Fields: Für POST und PATCH, nur die Felder, die gesetzt werden sollten (auch im Response).
    Für Response zu DELETE (und GET falls implementiert), alle Felder im Datensatz.
    Der Microservice muss in beiden Richtungen Typkonvertierungen (entsprechend Feldname) für die Feldwerte machen.

Vorübergehendes Schlusswort

Soweit bin ich erstmal mit den Gedanken, es erscheint mir machbar, Ihr habt bestimmt einige gute Vorschläge dazu und ich würde mich auf Zusammenarbeit freuen!
Es gibt ja einige offene Fragen, z.B. bzgl. __keyversion und (essentiell aber noch nicht erwähnt) wie am Besten Zugang zu der API beschränkt werden kann, z.B. durch eine auszuhandelde, möglicherweise ständig ändernde Session-ID - auch hier wäre ich für guten Rat dankbar!

Und auf alle Fälle Danke erstmal fürs Lesen.

Re: Design-Entwurf: Allgemeine REST-API für Schreibzugriff auf durch PGDBE benutzte ISAM Datenbanken

Verfasst: Di, 21. Mär 2023 13:07
von Tom
Exzellenter Ansatz.
Ich mache mir auch Gedanken (positiv konnotiert).

Re: Design-Entwurf: Allgemeine REST-API für Schreibzugriff auf durch PGDBE benutzte ISAM Datenbanken

Verfasst: Mi, 22. Mär 2023 8:13
von nightcrawler
David,
REST mit JSON ist sicherlich universell ... aber ein API kann man auch als DLL anbieten. Damit hättest du schneller eine funktionierende Schnittstelle. Für die Zukunft ist sicherlich REST die bessere Wahl. Bei https://www.odata.org findest Du die Quasi-Standardisierung.

Re: Design-Entwurf: Allgemeine REST-API für Schreibzugriff auf durch PGDBE benutzte ISAM Datenbanken

Verfasst: Mi, 22. Mär 2023 8:50
von dtmackenzie
Hallo Joachim,

eine DLL war auch mein erster Gedanke, aber ich wurde explizit davon abgeraten:
Re: Schreibzugriff auf pgdbe-Datenbank für Programme, die nicht in Xbase++ geschrieben sind (z.B. in C#)

Das Ganze ist bei uns noch nicht ganz festgelegt, es geht um eine Weichenstellung für die nächste Jahren nachdem ich in Rente gehe. Unsere Firma/Entwicklungssituation sieht so aus. Aber meine Meinung nach sieht es schon so aus, als ob REST der richtige Weg wäre. Dieser Entwurf sollte uns helfen, den ersten Schritt in diese Richtung zu machen.

Wenn wir doch den REST-Weg einschlagen, dann sieht OData extrem interessant aus, recht herzlichen Dank für das Link, ich werde es in unsere interne Beratungen weiterleiten.

Re: Design-Entwurf: Allgemeine REST-API für Schreibzugriff auf durch PGDBE benutzte ISAM Datenbanken

Verfasst: Mi, 22. Mär 2023 12:40
von Frank Grossheinrich
Hallo Ihr,

nur zur Info und damit ihr nicht Energie in etwas steckt, das wir sowieso machen wollen ... wir wollen genau so eine generische Implementierung als Beispiel in der Version 3.0 haben. Vollständiges CRUD via REST in PG ISAM emulierten Tabellen. So der Plan :)

Nur so als Hinweis ...

Grüße
Frank

Re: Design-Entwurf: Allgemeine REST-API für Schreibzugriff auf durch PGDBE benutzte ISAM Datenbanken

Verfasst: Mi, 22. Mär 2023 13:02
von Tom
wir wollen genau so eine generische Implementierung als Beispiel in der Version 3.0 haben
Ich suche mal in meinen Archiven nach der ersten Ankündigung von Xbase++ 3.0. Kann sein, dass ich den guten alten Pegasus-Mailclient dafür wieder aktivieren muss. 8) (Nichts für ungut. Die Jahre, die nach der ersten Ankündigung bis zur ersten halbwegs nutzbaren Version der PGDBE vergingen, lassen sich leichter in Generationen zählen. Es ist schön, dass Ihr das auch machen wollt. Aber, bei allem Respekt und bei aller Bewunderung - Eure Zeitplanung ist aus der Hölle. :wink: )

Re: Design-Entwurf: Allgemeine REST-API für Schreibzugriff auf durch PGDBE benutzte ISAM Datenbanken

Verfasst: Mi, 22. Mär 2023 13:03
von dtmackenzie
Hallo Frank,

das ist eine wunderbare Nachricht, Danke!
Ich wollte sowieso fragen, ob Alaska sich sowas als Standard-Beispiel vorstellen könnte, dort wäre es am Besten aufgehoben.
Wenn irgendwelche meiner Überlegungen oben von Nutzen sind, dann kann Alaska sie gern dabei verwenden.
Wie genau sieht die API aus, die Ihr implementieren wollt?
Gibt es Termine dafür oder für 3.0 insgesamt?
Ich würde gern darauf warten, eine Terminschätzung brauche ich aber für meinen Chef.

Leider kann ich nicht beim Entwicklertreffen am 5.-6. Mai dabei sein.

Re: Design-Entwurf: Allgemeine REST-API für Schreibzugriff auf durch PGDBE benutzte ISAM Datenbanken

Verfasst: Mi, 22. Mär 2023 13:31
von HaPe
Ich suche mal in meinen Archiven nach der ersten Ankündigung von Xbase++ 3.0.
https://www.youtube.com/watch?v=PPRVxS8L5Tc

Re: Design-Entwurf: Allgemeine REST-API für Schreibzugriff auf durch PGDBE benutzte ISAM Datenbanken

Verfasst: Mi, 22. Mär 2023 17:45
von Manfred
:lol: :badgrin:

Re: Design-Entwurf: Allgemeine REST-API für Schreibzugriff auf durch PGDBE benutzte ISAM Datenbanken

Verfasst: Do, 23. Mär 2023 10:43
von Frank Grossheinrich
Tom hat geschrieben: Mi, 22. Mär 2023 13:02 (Nichts für ungut. Die Jahre, die nach der ersten Ankündigung bis zur ersten halbwegs nutzbaren Version der PGDBE vergingen, lassen sich leichter in Generationen zählen. Es ist schön, dass Ihr das auch machen wollt. Aber, bei allem Respekt und bei aller Bewunderung - Eure Zeitplanung ist aus der Hölle. :wink: )
Hey Tom,

ich glaube, ich weiß, was du meinst. Und auch mir passt unsere Zeitplanung auch nicht immer. Darfst du mir glauben. Keinem bei uns/Alaska.
Aber eine PGDBE ist null und nicht mit diesem einfachen Service vergleichbar, den ich "angekündigt" habe. Und Version 3.0 wird bei uns intern schon regelmäßig gebuildet. Wir haben uns auch vorgenommen, dass wir zur Entwicklerkonferenz bereits etwas an die Teilnehmer verteilen können, damit sie es auch testen/überprüfen können. Nicht nur Ankündigungen (aber natürkich auch). Dafür schuften wir gerade ziemlich intensiv.

Aber macht das gerne hier selbst. Der Vorschlag von David ist ja klasse. Ich wollte euch nur etwas Zeit sparen. Und eure Implementierung wird auch nicht von Tag eins fehlerfrei sein.

Wir arbeiten dran ...
Frank

Re: Design-Entwurf: Allgemeine REST-API für Schreibzugriff auf durch PGDBE benutzte ISAM Datenbanken

Verfasst: Fr, 24. Mär 2023 13:42
von Frank Grossheinrich
Es hat mich in den Fingern gejuckt ... und eventuell völlig unpassend ...
XPP30.JPG
XPP30.JPG (34.55 KiB) 3952 mal betrachtet
:)
Das ist kein gebasteltes Bild, sondern ich installiere es mir gerade.
Und werde gleich danach mit den MicroServices "spielen", die schon nutzbar sind.
Und Vieles mehr.

Schöne Grüße
Frank

Re: Design-Entwurf: Allgemeine REST-API für Schreibzugriff auf durch PGDBE benutzte ISAM Datenbanken

Verfasst: Fr, 24. Mär 2023 21:55
von Tom
C‘mon, das ist doch gephotoshoppt. 8)

Re: Design-Entwurf: Allgemeine REST-API für Schreibzugriff auf durch PGDBE benutzte ISAM Datenbanken

Verfasst: Fr, 24. Mär 2023 22:53
von jobbisoft
Hallo Tom,

verliere nicht den Glauben.

Saludos
Osvaldo

Re: Design-Entwurf: Allgemeine REST-API für Schreibzugriff auf durch PGDBE benutzte ISAM Datenbanken

Verfasst: Sa, 25. Mär 2023 10:14
von Tom
Das war nur ein Witz.

Re: Design-Entwurf: Allgemeine REST-API für Schreibzugriff auf durch PGDBE benutzte ISAM Datenbanken

Verfasst: Sa, 25. Mär 2023 10:47
von Wolfgang Ciriack
Ich spiele schon mit der 5.0 :lol:
Scherz.png
Scherz.png (115.5 KiB) 3858 mal betrachtet

Re: Design-Entwurf: Allgemeine REST-API für Schreibzugriff auf durch PGDBE benutzte ISAM Datenbanken

Verfasst: Sa, 25. Mär 2023 11:07
von nightcrawler
Wolfgang,
das ist doch ein Fake....in der Titelleiste steht ganz deutlich 3.00 ;)

Re: Design-Entwurf: Allgemeine REST-API für Schreibzugriff auf durch PGDBE benutzte ISAM Datenbanken

Verfasst: Sa, 25. Mär 2023 11:24
von Martin Altmann
Warum nennst du dich nicht Hawkeyes?

Viele Grüße,
Martin

Re: Design-Entwurf: Allgemeine REST-API für Schreibzugriff auf durch PGDBE benutzte ISAM Datenbanken

Verfasst: Di, 28. Mär 2023 14:26
von dtmackenzie
Erstmal vielen Dank an allen für das Mitdenken und die Anregungen!

Nach einer Präsentation an meinen Chef wurde entschieden, diesen Weg (REST) nicht weiter zu folgen.
Stattdessen wird unsere Datenbank regelmäßig in eine rein strukturierte SQL Datenbank konvertiert, womit Nachfolgeanwendungen entwickelt werden.
Das ist als Einbahnstraße gedacht, langfristig wird Xbase++ / ISAM aus der Firma verschwinden, auch wenn dies Jahre dauern wird.
Diese Entscheidung ist sehr spezifisch zu unserer Firmensituation: Es handelt sich um unsere firmeninterne ERP-System, und es ist keine breitere Connektivität erwünscht. Sonst hätte REST vielleicht eine Chance gehabt, aber es kommt hinzu, dass ich in einem Jahr in Rente gehe und bin der einzige in der Firma mit Xbase++ (oder Vorgänger) Kenntnisse. Mein Chef wünscht sich perspektivisch Anwendungen, die auf einer gemeinsamen SQL Datenbank basiert sind, und wofür entsprechende Programmierkenntnisse vorhanden sind.

Ich erkläre dies alles weil für viele andere Firmen der Weg über REST Microservices der richtige sein wird.
Viel Erfolg dabei!

Re: Design-Entwurf: Allgemeine REST-API für Schreibzugriff auf durch PGDBE benutzte ISAM Datenbanken

Verfasst: Do, 14. Dez 2023 8:16
von Manfred
Frank Grossheinrich hat geschrieben: Fr, 24. Mär 2023 13:42 Es hat mich in den Fingern gejuckt ... und eventuell völlig unpassend ...

XPP30.JPG

:)
Das ist kein gebasteltes Bild, sondern ich installiere es mir gerade.
Und werde gleich danach mit den MicroServices "spielen", die schon nutzbar sind.
Und Vieles mehr.

Schöne Grüße
Frank
langsam wäre es mal passend......

Re: Design-Entwurf: Allgemeine REST-API für Schreibzugriff auf durch PGDBE benutzte ISAM Datenbanken

Verfasst: Do, 14. Dez 2023 11:19
von Jan
Manfred,

sei doch nicht so ungeduldig. Auf der letzten Entwicklerkonferenz wurde auf ausdrückliche Nachfrage sehr eindeutig und vor versammelten Konferenzteilnehmern von einem Alaska-Mitarbeiter erklärt, das die Testversion der 3.0 innerhalb von Monaten, nicht von Jahren kommen wird. Und seither sind es gerade mal sieben Monate her. Also alles noch im Plan.

Jan

Re: Design-Entwurf: Allgemeine REST-API für Schreibzugriff auf durch PGDBE benutzte ISAM Datenbanken

Verfasst: Do, 14. Dez 2023 11:47
von Marcus Herz
Ich vernute, das neue Portal
ist mit der neuen Technik schon realisiert und wird da noch getestet.

Re: Design-Entwurf: Allgemeine REST-API für Schreibzugriff auf durch PGDBE benutzte ISAM Datenbanken

Verfasst: Do, 14. Dez 2023 11:48
von Manfred
ich lache mich kaputt. Wie kann man sein Portal nur ASI nennen? :badgrin:

Re: Design-Entwurf: Allgemeine REST-API für Schreibzugriff auf durch PGDBE benutzte ISAM Datenbanken

Verfasst: Do, 14. Dez 2023 12:25
von Marcus Herz
Vielleicht:
Alaska Software Internet Portal

Re: Design-Entwurf: Allgemeine REST-API für Schreibzugriff auf durch PGDBE benutzte ISAM Datenbanken

Verfasst: Do, 14. Dez 2023 12:34
von Manfred
klar, aber hier im Ruhrpott hat das eine etwas andere Bedeutung.

Re: Design-Entwurf: Allgemeine REST-API für Schreibzugriff auf durch PGDBE benutzte ISAM Datenbanken

Verfasst: Do, 14. Dez 2023 15:53
von Bertram Hansen
Nicht nur im Ruhrgebiet. :roll:
Ich habe eben auch asi-reisen.de gefunden. #-o