OT: Einführung/Grundlagen REST-API

Hallo zusammen,

hat nur entfernt was mit MD zu tun. Um Daten zwischen verschiedenen System auszutauschen lese ich immer wieder von der Rest-API. Ich habe mir die gefunden Dokus im Web mal angeschaut. Nun weiß ich zumindest mal grob was man damit machen kann. Ich würde mich gerne näher damit beschäftigen.

Gibt es dazu brauchbare Literatur / Anleitungen? Die API ist ja (wenn ich es richtig verstehe) lediglich die Schnittstelle. Mit welcher Programmiersprache setzt man das um oder kann dies mit mehreren realisiert werden?

Was mir auch nicht klar ist. Ich habe zwei Systeme (Pascom und Kopano). Beide haben eine Rest-API. Muss ich nun auf einem dritten System selbst ein Programm schreiben welches die Daten synchronisiert?

Wäre für einen Schubs in die richtige Richtung dankbar :slight_smile:

Viele Grüße
sven

Mit jeder, selbst auf der Shell per “curl” geht das, da es nur HTTP-Requests sind. Wenn man in die REST-Doku schaut, dann kann man ja dort auch direkt Anfragen ausführen. Dort steht dann das passende “curl” Kommando.

Das kommt drauf an. Es gibt Systeme die können Ihrerseits direkt mit einer anderen REST-API sprechen. Meist braucht man aber ein Programm dafür. Wenn Shell nicht reicht gibt es oft fertige Libraries um aus Programmiersprachen REST-APIs anzusprechen. Ich arbeite gerade an einem Python-Modul für die Pascom API.

Google sagt z.B. das es passende Python-Module für Kopano gibt:

https://documentation.kopano.io/kopano_python_kopano/

HTH
Matthias

Bedeutet dies für meinen Anwendungsfall (Kopano ↔ Pascom) sobald das Python-Modul für Pascom fertig ist kann man damit die beiden Systeme zusammen bringen?

Kann man, wenn man kann :slight_smile: Man braucht dazu aber auch das Kopano-Modul. Was möchtest du denn machen? Mein Einstig war das Thema Adressbuchsync, auch wenn ich das jetzt anders mache als gedacht, siehe Featurerequest: Telefonbuch keine eindeutigen Felder

In Kopano hat jeder Benutzer sein persönliches Adressbuch. Daneben gibt es je nach Gruppe noch diverse gemeinsame Adressbücher. Diese hätte ich gerne automatisch in der Pascom.

Eine Möglichkeit direkt aus Kopano heraus zu wählen wäre nice aber ich denke das wird nicht gehen.

Wieso? Das Kopano kann doch sicher auch mit TAPI arbeiten, oder?

LG THOMAS

Kann ich nicht sicher sagen. TAPI ist doch aber auf Windows beschränkt, oder? Wir arbeiten auf den Clients mit Ubuntu und minimal MAC

Da hast du recht, für Linux gibbet kein TAPI.

LG THOMAS

Ja, dachte ich. Wenn die Adressbücher alle in der MD wären wäre das schon prima. Einfach schade das die MD kein ActiveSync kann. Damit könnte man ähnlich wie am Android einfach alle Adressbücher einbinden und fertig.

Es gibt aber https://d3v.one/telify/ und das funktioniert in Chrom und Firefox. Wenn man des Kopano Destop-Client (eine Electron-App) verwendet müsst sich das auch irgend wie installieren lassen. Habe ich aber keine Erfahrungswerte. Das Problem mit Telify ist aber, dass es nur HTTP-Requests machen kann und eine Anmeldung am Rest nicht funktioniert. Deshalb habe ich das vor längerzeit mal etwas gebaut https://wiki.mhcsoftware.de/pascom_python_dialer habe es im Moment aber selbst nicht mehr im Betrieb, da ich die Kopano Desktop-App nutze und noch keine Lust hatte mich damit zu befassen.

Ja, wir nutzen auch DeskApp da einfach angenehmer wie im Browser. Die WebApp im Browser nutzen wir im Notfall wenn extern und nur Browser verfügbar.

Im Zweifel müsste man halt ein Kopano-Plugin bauen, geht auch, ist aber nicht trivial …

Das hier https://community.zarafa.com/pg/plugins/project/5453/developer/combird/syrinx-unified-communications-addon könnte man vielleicht zum Einstieg verwenden.

Sorry wenn ich nochmal nerve. Ich versuche jetzt einfach mir Klarheit zu verschaffen wie so etwas realisiert werden kann. Da ich das wohl selbst nicht hin bekomme und auch selbst nur eine 1-Mann-Firma bin werde ich es wohl auch nicht alleine beauftragen können. Ich würde dann im zweiten Schritt versuchen andere Benutzer - die ebenfalls MD <-> Kopano nutzen - zu finden damit man dies vielleicht gemeinsam finanzieren kann. Ohne im Moment eine Ahnung zu haben was so etwas kostet.

Ich fasse mal kurz zusammen was ich bisher meine zu wissen:

Auf Seite von Kopano brauche ich ein entsprechendes Modul/PlugIn welches in der Lage ist selbständig mit einer anderen REST-API (in diesem Fall MD) zu sprechen. Hierzu würde ich bei Kopano nachfragen bzw. klären die Dokumentation zur API zu bekommen.

Dies würde aber erst funktionieren wenn auf Seite MD das Python Modul für die Pascom API fertig ist.

Anschließend muss definiert werden welches Kopano-Feld in welches Pascom-Feld geschrieben werden soll.

Habe ich das alles so halbwegs korrekt dargestellt?

Problematisch dürfte die Tatsache sein dass es in Kopano mehrere Adressbücher gibt und in Pascom lediglich Global und Privat.

Cheers
Sven

Ich habe mich ein bisschen umgeschaut. Ergebnis: Es gibt schon alles was man braucht.

CSV Export:

https://stash.kopano.io/projects/KSC/repos/core-tools/browse/contacts2csv

Import erfolgt dann über den Pascom-Connector. Der Displayname könnte ein problem werden, da der bei Kopano nicht eindeutig sein kann bei Pascom aber eindeutig sein muss. Um manuell zu importieren kann man das von Hand gerade ziehen. Ein automatischer Import könnte schwierig werden.

ich habe das gerade mal probiert. Auf dem Kopano-Server den Export erstellt:
python contact2csv.py --user office --export --delimiter ";"
und auf der Pascom einen Import-Konfiguriert:

Prefilter habe ich unverändert belassen:
//Use a filter like this to filter the row before it gets mapped using the variables
//You also have access to all system settings via $settings
//The function must return true or false
//return array_key_exists(‘displayName’, $row);
return true;
Die Variabeln habe ich entsprechend angepasst:

Aber bekomme beim Test Fehler:

|2020-10-07 19:18:04|Lese Importbeschreibung|
|2020-10-07 19:18:04|Read CSV File for KopanoCSV : /tmp/connector-6.csv|
|2020-10-07 19:18:04|Ungültige Zeile überspringen Zeile [2]: Die Anzahl der Feldnamen unterscheidet sich von der Anzahl der Spalten.|
|2020-10-07 19:18:04|Skip empty Line 3|
|2020-10-07 19:18:04|Ungültige Zeile überspringen Zeile [4]: Die Anzahl der Feldnamen unterscheidet sich von der Anzahl der Spalten.|
|2020-10-07 19:18:04|Ungültige Zeile überspringen Zeile [5]: Die Anzahl der Feldnamen unterscheidet sich von der Anzahl der Spalten.|
|2020-10-07 19:18:04|Ungültige Zeile überspringen Zeile [6]: Die Anzahl der Feldnamen unterscheidet sich von der Anzahl der Spalten.|
|2020-10-07 19:18:04|Skip empty Line 7|
|2020-10-07 19:18:04|Ungültige Zeile überspringen Zeile [8]: Die Anzahl der Feldnamen unterscheidet sich von der Anzahl der Spalten.|
|2020-10-07 19:18:04|Ungültige Zeile überspringen Zeile [9]: Die Anzahl der Feldnamen unterscheidet sich von der Anzahl der Spalten.|
|2020-10-07 19:18:04|Ungültige Zeile überspringen Zeile [10]: Die Anzahl der Feldnamen unterscheidet sich von der Anzahl der Spalten.|
|2020-10-07 19:18:04|Skip empty Line 11|
|2020-10-07 19:18:04|Ungültige Zeile überspringen Zeile [12]: Die Anzahl der Feldnamen unterscheidet sich von der Anzahl der Spalten.|
|2020-10-07 19:18:04|Skip empty Line 13|
|2020-10-07 19:18:04|Ungültige Zeile überspringen Zeile [14]: Die Anzahl der Feldnamen unterscheidet sich von der Anzahl der Spalten.|
|2020-10-07 19:18:04|Ungültige Zeile überspringen Zeile [15]: Die Anzahl der Feldnamen unterscheidet sich von der Anzahl der Spalten.|
|2020-10-07 19:18:04|Skip empty Line 16|
|2020-10-07 19:18:04|Ungültige Zeile überspringen Zeile [17]: Die Anzahl der Feldnamen unterscheidet sich von der Anzahl der Spalten.|
|2020-10-07 19:18:04|Skip empty Line 18|
|2020-10-07 19:18:04|Ungültige Zeile überspringen Zeile [19]: Die Anzahl der Feldnamen unterscheidet sich von der Anzahl der Spalten.|
|2020-10-07 19:18:04|Skip empty Line 20|
|2020-10-07 19:18:04|Ungültige Zeile überspringen Zeile [21]: Die Anzahl der Feldnamen unterscheidet sich von der Anzahl der Spalten.|
|2020-10-07 19:18:04|Ungültige Zeile überspringen Zeile [22]: Die Anzahl der Feldnamen unterscheidet sich von der Anzahl der Spalten.|
|2020-10-07 19:18:04|Ungültige Zeile überspringen Zeile [23]: Die Anzahl der Feldnamen unterscheidet sich von der Anzahl der Spalten.|
|2020-10-07 19:18:04|Ungültige Zeile überspringen Zeile [24]: Die Anzahl der Feldnamen unterscheidet sich von der Anzahl der Spalten.|
|2020-10-07 19:18:04|Ungültige Zeile überspringen Zeile [25]: Die Anzahl der Feldnamen unterscheidet sich von der Anzahl der Spalten.|

Wenn ich den Fehler richtig interpretiere liegt es daran das in der Kopano-Export-Datei mehr Spalten enthalten sind als ich in MD-Felder umsetze. Aber wenn ich die Spalten aus meiner Export-Datei erst anpassen muss kann ich den Vorgang ja nicht automatisieren.

Oder verstehe ich das komplett falsch?

ok, Feld Einfassung auf " gesetzt. Dann klappt es

sry für die Leichenschändung.
Ich habe es versucht mit unserem Telbuch aus den Public Folders.
Doof ist halt nur das das python hier extrem bockig ist da wir hier und da unicode zeichen drinne haben.
Das aktuelle kopano nutzt python3 da ist nix mehr mit utf8 umbiegen.
Desweiteren wäre json statt csv kommoder, das könnte man dann scripten und via api in die cloud ballern …