Achtung: Undokumentierte Änderungen in der REST API!

Hallo zusammen,

ich befinde mich zu den nachfolgenden Themen bereits im Austausch mit dem Support. Da es absehbar ist, dass diese Veränderungen/Probleme nicht rückgängig gemacht bzw. behoben werden, halte ich es für wichtig, dass man als Benutzer der API zumindest weiß, was sich verändert hat und wie man darauf reagieren sollte.

1) Unterschiedliche Schreibweise gleicher Attribute

Abhängig davon, ob, der Benutzer einen Telefonbucheintrag hat oder nicht, gibt der API endpoint /queue/{{team-name}} unter phonebookentry entweder displayname oder displayName zurück. Das Problem betrifft weitere Felder. Als Entwickler und Nutzer der API gibt es dafür zwei Lösungen:

a.) Man prüft auf beide bekannten Schreibweisen und nimmt das Attribute, das existiert. (Nicht empfohlen, da es weitere unbekannte Schreibweisen geben könnte)
b.) Man misstraut der Schreibweise der Attribute ausnahmslos und konvertiert diese zu lowercase, um sicherzustellen, dass die abgefragten Attribute immer gleich bezeichnet sind. (Empfohlen)

2.) Der CDR Endpoint gibt leere Felder nicht mehr zurück

Früher war es so, dass der Endpoint /cdr immer das gleiche Datenmodell zurückgegeben hat und Attribute ohne Wert eben leer waren. Seit dem Update Anfang Dezember ist es jedoch so, dass viele Felder nicht mehr zurückgegeben werden. Das heißt, statt connected: 0 für einen Anruf, der nicht verbunden ist, fehlt das Attribute connected nun vollständig. Das betrifft auch Attribute wie holdDuration, srcInternal, dstInternal, etc. Als Entwickler und Nutzer der API ist das wichtig zu wissen, denn man darf sich nicht mehr darauf verlassen, dass ein Attribute im Payload existiert und muss diesem Attribute daher einen Standardwert geben, für den Fall, dass es nicht existiert. In PHP könntest dies z. B. so aussehen:

$connected = (int) ($cdrItem['connected'] ?? 0);

Hier durch wird sicher gestellt, dass connected immer die Anzahl der verbundenen Sekunden zurückgibt und auch immer eine Ganzzahl ist. Hierdurch kann im Code auf $connected > 0 geprüft werden, wenn man wissen möchte, ob der Anruf verbunden war.

2 Likes

Wieso macht man sowas nur seitens Pascom? Ich meine gut, Schreibweisen bekommt man ja noch leicht in den Griff, aber jetzt jedes mal prüfen, ob es Attribute gibt oder nicht halte ich für völlig unnötig. Ob Pascom sich wohl im Klaren darüber ist, was das für die Nutzer/Entwickler bedeutet, die auf Basis der API unzählige Projekte entwickelt haben und nun nachpflegen müssen?

Der Pascom Client wird für seine CDR sicher auch die gleichen API-Daten verwenden wie die REST-API. Um die Menge an übertragenen Daten zu reduzieren, macht es grundsätzlich Sinn nur das zu übertragen, was man tatsächlich benötigt, ABER, sowas muss man als Version 2.0 und Breaking Change parallel zur bisherigen Implementierung tun und lange und gut dokumentiert vor der Umsetzung ankündigen. Hier ist halt mal wieder über Nacht und unangekündigt etwas verändert worden. Ich war zufälligerweise an diesem Tag um 0 Uhr noch am Notebook und konnte dadurch die kaputten Daten sofort bemerken und innerhalb von einer Stunde einen Bugfix entwickeln und global verteilen, inklusive eines Skripts, das kaputte Daten repariert hat. Nur ist das sicher nicht der Normalfall.