Die Einstellung zur Ausbildung

Die Zwischenprüfung für unsere auszubildende Fachinformatikerin steht an. Das ist Halbzeit, also Zeit für Rückschau, Reflexion, Kritik und Selbstkritik. Was haben wir richtig gemacht und was können wir besser machen?

Einiges können (und werden) wir besser machen, aber was wir damals mal richtig gemacht haben – jetzt können wir es ja sagen – war der Einstellungstest. Denn es ist schwierig, allein von den Bewerbungsunterlagen und einem Einstellungsgespräch ausgehend eine halbwegs gut begründete Entscheidung zu treffen. Man braucht etwas vergleichbares, einen Maßstab.

Bitte machen Sie zu den Aufgaben 1) und 2) Notizen in einem Textverarbeitungsprogramm Ihrer Wahl (z.B. Notepad, Word).

1) Recherche im Internet (aus dem wahren Leben)

In der Firma soll eine Schnittstelle zum Webdienst eines externen Dienstanbieters programmiert werden. Der technische Ansprechpartner des Dienstanbieters behauptet folgendes:

“Man kann HTTP-Header mit CRLF oder LF abschließen. Beides ist RFC-konform.”

a) Versuchen Sie, anhand von Hinweisen im Internet diese Aussage inhaltlich zu verstehen. Worum geht es überhaupt?
- Was sind HTTP-Header?
- Was ist mit LF und CRLF gemeint?
- Was bedeutet "RFC-konform"? Was ist ein RFC?

b) Versuchen Sie, einen Beleg zu finden, der die Aussage stützt oder widerlegt.
- Welche Stichwörter sind für die Suche relevant?

Notieren Sie Ihre Vorgehensweise. Wonach suchen Sie?
Wichtiger als das Endergebnis ist die Herangehensweise!

2) Programmierung (Denken in Code)

Hier ist ein kleines Programm (in Pseudocode). Es wird mit Parametern x und y gestartet (x und y sind ganze Zahlen):

PROGRAM hello(x,y)
    IF x > 0 THEN
        y := 1
    ELSE IF x < 0 THEN
        y := x
    END IF
    z := x*y
    IF z > 0 OR z = x THEN
        Print “Hello World!”
    END IF
END PROGRAM

Bei welchen Werten von x und y wird “Hello World!” gedruckt?

3) Praktische Alltagsbewältigung

Finden Sie heraus, wo man in dieser Firma etwas ausdrucken kann (Kollegen fragen ist erlaubt) und drucken Sie Ihre Notizen/Ergebnisse aus.

Naja, gefunden haben wir jedenfalls die Richtige :)

@Edith: Viel schwieriger kann die Zwischenprüfung ja eigentlich auch nicht werden, oder? Viel Erfolg! ;)

providing: API Level 2 // der REST ist ein Endpunkt

Neues aus der Entwicklungsabteilung

Wer keine Lust hat, diesen Artikel zu lesen und einfach nur unsere neue DNS-API benutzen will, kann auch einfach seinen Client starten und den Rest auslassen 8-)

“Die Galaxie bleibt nicht, wie sie ist. Sie ändert sich von Tag zu Tag und auch wir müssen uns ändern und stärker werden, um den neuen Herausforderungen gerecht zu werden. Als Jedi können wir es uns niemals erlauben, träge und selbstgefällig zu werden. Wir müssen stets wachsam bleiben, immer auf das achten, was um uns herum geschieht, und bereit sein, uns wechselnden Umständen anzupassen.”
Luke

Providing Interfaces

Inmitten all der aufregenden Abenteuer, die das Providerleben so bietet, haben wir bei http.net mal kurz die Zeit angehalten, um Bausteine für die Zukunft zu sortieren. Es liegen mehr als 10 Jahre Schnittstellentechnologie hinter uns, und mittlerweile ist ein bunter Zoo von Clients aller Art entstanden, die permanent mit Registrierungsstellen und Lieferanten aller Art und in aller Welt kommunizieren, damit wir selbst wiederum als Dienst unseren Partnern all diese Dienste in möglichst übersichtlicher Form zur Verfügung stellen können. Das Spannende am Internet ist, dass es noch lernt, und wir lernen mit ihm zusammen: wir lernen, in Schnittstellen zu denken.

http.net API

Denken wir mal über die Armaturen hinaus, also das User-Interface, das in Form von Weboberflächen, Robots oder SOAP-Diensten daherkommt, und nennen wir die Basis dahinter die API. Die API bietet einen Dienstvertrag, also eine Menge von Operationen zur Erhebung und Manipulation von Daten, die im weiteren Sinne in verteilten Datenbanken hinterlegt sind (wie z.B. Registries, DNS- oder Whois-Server). Unabhängig von der Kodierung (z.B. in XML, JSON oder als E-Mail-Template) kann man die Struktur der Daten am besten in Form von Objekten beschreiben.

Wie kann man Bedingungen beschreiben?

Der Client verwendet eine Operation, also er sendet ein Objekt unter Hinweis auf eine bestimmte Verabredung zur Verarbeitung an den Dienst und erhält ein Objekt als Antwort zurück. Das impliziert zunächst, dass die gesendeten Daten in vereinbarter Weise strukturiert sind, damit der Dienst überhaupt erkennt, welche Bedingungen erfüllt sein sollen. Wenn er die Daten erfolgreich einem Schema zugeordnet hat, schickt er sie durch einen vierstufigen Validierungsprozess:

  • Zugriffskontrolle für die Operation (OperationAccess)
  • Validierung der Daten gegen definierte Bedingungen (DataValidation)
  • Konsistenz von Operation, Daten und und Datenbank (DataConsistency)
  • Zugriffskontrolle für die Daten und die Datenbank (DataAccess)

Innerhalb dieser Stufen sind einzelne Bedingungen zu prüfen: z.B. ist der Wert eines Datenfeldes für Domainnamen gegen die syntaktischen Regeln zu validieren, die durch das RFC für Domainnamen und die zuständige Registry vorgegeben sind (DataValidation), während es eine Frage der Datenkonsistenz ist, dass eine bereits registrierte Domain nicht erneut registriert werden kann (DataConsistency), und schließlich sichergestellt sein muss, dass nur berechtigte Clients eine bestehende Domain verändern können (DataAccess).

Je nachdem, wie viele weitere Parteien in die Transaktion involviert sind und je nachdem, wie deterministisch sie ist, kann das Resultat kompliziert sein. Zum Beispiel birgt ein Domaintransfer einige Unwägbarkeiten, wenn mehrere Parteien mit mehr oder weniger vorhersagbarem Verhalten an einem Prozess beteiligt sind, der verschiedene Zustände annehmen kann. Das Anlegen einer DNS-Zone ist dagegen sehr einfach, denn die DNS-Server sind nur spezielle Datenbanken, die in unseren eigenen Rechenzentren stehen, so dass sich das Resultat im Wesentlichen aus den Anfangsbedingungen ergibt und unmittelbar zur Verfügung steht. Deshalb haben wir uns entschieden, die schon lange geplante DNS-API als Prototyp für einen neuen Architekturstil zu implementieren.

Gekoppelte Prozesse und implizite Abhängigkeiten

Früher hat man Dienste als Prozess programmiert, also irgendwo in den Tiefen verschachtelter Prozeduren Bedingungen in Form von IF-THEN-ELSE-Verzweigungen vergraben. Dann hat man hinterher den Programmierer gefragt, was er da gemacht hat, und das bestenfalls in eine Dokumentation geschrieben oder sich einfach gemerkt.

codinghorror1

Daraus ergeben sich Dialoge wie dieser:

  • $Kunde an $Support: “Was hat diese Fehlermeldung zu bedeuten?”
  • $Support an $Programmierer: “Was hat diese Fehlermeldung zu bedeuten?”
  • $Programmierer an $Support: “Schwer zu sagem das hat $ExKollege1 so programmiert, wahrscheinlich weil $ExKollege2 das wollte.”
  • $Support an $Programmierer: “Kann man das nicht besser lösen?”
  • $Programmierer an $Support: “Hm, schon, aber wenn man das in $Modul1 ändert, könnte auch $Modul2 betroffen sein …”
  • $Support an $Kunde: “Bitte haben Sie etwas Geduld, die Technik arbeitet daran.”

Der Trick mit der deklarativen Architektur

Wir wollen, dass unser Support weniger Arbeit hat. Deshalb erfinden wir den Begriff der Bedingung neu. Wir erklären Bedingungen zu Attributen, die an Operationen, Datenobjekte oder Datenfelder gebunden werden können, also zu eigenständigen Objekten mit Eigenschaften und Fähigkeiten. Eine solche programmierte Bedingung nennen wir ein Constraint. (Den freundlichen Support wird es natürlich trotzdem weiterhin geben :-) )

code

Dieser Ansatz mag auf den ersten Blick etwas akademisch wirken, doch er vereinfacht enorm die Verwaltung von Bedingungen und bildet die Basis für ein Höchstmaß an Flexibilität und Skalierbarkeit. Um es konkret zu machen, ein Constraint soll:

  • eine informelle technische Beschreibung seiner Bedingungen bieten,
  • eine Validierungsfunktion für bestimmte Eingangsdaten bereitstellen, und
  • im Fall des Fehlschlagens der Validierung eine genaue Begründung liefern.

Zum Beispiel definiert die API ein Datenobjekt namens ARecord, das ein Feld namens ipv4 enthält. Dies ist auf der Ebene der Schema-Definition nur eine beliebige Zeichenkette. Da jedoch nicht jede Zeichenkette als IPv4-Adresse interpretierbar ist, binden wir das Resultat ARecordInvalidIPv4 an dieses Feld:

75120 - ERROR: invalid IPv4 address in A record (654)

Alle Resultate sind einem 5-stellig nummerierten Katalog entnommen, der eine Erweiterung der alten 3-stelligen “Systemantworten” des Robots bildet und in unserer alten Domain-API schon lange Anwendung findet. Zusammen mit dem Resultat wird nun auch der Constraint [DataValidation::IPAddress] an das Feld gebunden, um zu definieren, wann dieses Resultat zurückgegeben werden soll. Der Constraint implementiert die Validierungsfunktion und gibt darüber Auskunft, welche Zeichenketten er als IPv4-Adresse akzeptiert.

Auf diese Weise kann die API schon im Vorfeld mitteilen, unter genau welchen Umständen welche Resultate zurückgegeben werden, womit die ganze mühselige Arbeit der Schnittstellendokumentation vollständig automatisiert ist. Die gelieferte Beschreibung ist unabgängig vom Darstellungsformat, so dass die Dokumentation in beliebiger Form veröffentlichen werden kann, z.B. innerhalb einer HTML- oder PDF-Dokumentation.

constraint

Genauso kann die API auch z.B. dokumentierten Quellcode für Clients generieren.

clientcode1

Der Dienst, der die API implementiert, hat zu garantieren, dass eine Operation dann und nur dann zur Ausführung kommt, wenn auf jeder Stufe alle Bedingungen erfüllt sind. Andernfalls liefert er die einzelnen Resultate mit den zugehörigen Begründungen an den Client aus.

sample_error

Wie der Client die Antwortdaten verarbeitet oder darstellt, muss ihm überlassen bleiben. Die API bietet detailierte Resultate, die so weit wie möglich aufgeschlüsselt sind, um die Weiterverarbeitung z.B. in einem interaktiven Webseite oder dergleichen zu ermöglichen.

Und der REST?

Die API selbst ist zunächst die abstrakte Definition eines Dienstvertrags. Um sie zu nutzen, muss der Client sich für einen Endpunkt entscheiden. Ein Endpunkt besteht formell aus Adresse, Bindung und Dienstvertrag. Der Dienstvertrag ist für alle Endpunkte einer API-Instanz gleich. Die Bindung ist die Transportvereinbarung, wie z.B. SOAP via HTTPS mit verschiedenen Authentifizierungsmethoden oder auch SMTP. Kurz gesagt, der Client kann sich aussuchen, wie er mit der API sprechen will.

rest1

Zum Beispiel ist einer der Endpunkte so alt wie das HTTP-Protokoll selbst: REST ist einfach HTTP ohne eine weitere Protokollschicht. Man holt sich Daten mit GET, legt mit POST Objekte an, verändert sie mit PUT und löscht sie mit DELETE. Dieser Endpunkt ist momentan noch experimentell und unterstützt bis jetzt auch nur XML-kodierte Daten. Aber die API lernt ja noch …

Am besten einfach ausprobieren

Wer schnell einen PHP-Client für die DNS-API in Betrieb nehmen will, kann sich gerne den HttpNetSoapClient herunterladen. Mit Partner-ID und angemeldeter IP-Adresse kann es dann sofort losgehen.

Unter Beschuss

Es war einmal eine schicke, kurze Domain. Wenn man den Namen googelt, werden einige Ergebnisse aus Rechtsgründen ausgeblendet. An den angezeigten Suchergebnissen sieht man, dass es etwas mit, sagen wir, Erwachsenenunterhaltung, zu tun hat. Konnektiert ist sie derzeit nicht.

Jemand, womöglich aus der Branche, möchte, aus welchen Gründen auch immer, nicht, dass derjenige, der über die Domain verfügt, sein Geschäft damit betreibt. Wir sprechen von einer Branche, in der man keine kleinen Brötchen backt. Nein, ganz und gar nicht.

Die Dienstleistung, die er in Anspruch nimmt, um seinem Anliegen Nachdruck zu verleihen, wird in einer anderen, nicht weniger prächtig gedeihenden Branche angeboten. Dort gibt es Botnetze jeder Kapazität zu mieten, zusammen mit Rundum-Sorglos-Paketen zu verschiedenen Tarifen. Die berühmtesten Botnetze bestehen aus Millionen von weltweit verteilten Rechnern, die sich ihre Backdoors wahrscheinlich wiederum zusammen mit den Produkten der ersten Branche installiert haben.

Unser Freund kauft ordentlich ein, denn er hat wahrscheinlich irgendwann – einen Schnaps in der Hand – versprochen, dass kein Provider der Welt diese Domain jemals konnektieren wird. Etwa so, als würde man einem Markthändler das Geschäft dadurch vermiesen, dass man jede Markthalle in die Luft sprengt, in der er seinen Stand aufstellen will. Auf drei Nameservern der http.net war die Zone für etwa eine Stunde eingetragen. Der Rest ist (hoffentlich bald!) Geschichte.

Netzwerkpoesie

Netzwerkstrukturen. Das ist Technik, das ist logisch. Als Beispiel, im graphischen Klartext ist ein Spanning Tree Protocol  ‘einfach’ nur das:

 

Spanning Tree Protocol

 

Aber es muss ja nicht immer Klartext sein, oder?  Denn so kann man das Ganze auch beschreiben:

Spanning Tree Protocol
Algorhyme von Radia Perlman

I think that I shall never see
a graph more lovely than a tree.
A tree whose crucial property
is loop-free connectivity.
A tree that must be sure to span
so packet can reach every LAN.
First, the root must be selected.
By ID, it is elected.
Least-cost paths from root are traced.
In the tree, these paths are placed.
A mesh is made by folks like me,
then bridges find a spanning tree.

Da soll noch mal einer sagen, Poeten würden die Logik verderben!

Express-DNS im Domain-Formular

Um die Wartezeit auf das neue Partnerweb zu verkürzen, hat unsere Development-Task-Force sich vorgenommen, im alten Partnerweb noch ein paar Verbesserungen vorzunehmen, bevor es in den verdienten Ruhestand gehen kann. Hierzu zählt die bereits versprochene Einbindung des beliebten Domain-DNS-Kombi-Templates zur gleichzeitigen Domain- und DNS-Verwaltung in das Domain-Bestellformular. Damit kann man nun gleichzeitig konnektieren und registrieren oder die Domain zusammen mit den Nameservern updaten, was bisher nur bei DE-Domains mit NSentries möglich war.

Ein Beispiel Schritt für Schritt

Nehmen wir an, eine DE-Domain soll registriert werden. Im Bestellformular wählt man zunächst Domainnamen und Auftragsart:

Express-DNS Schritt 1

Im nächsten Schritt werden die Kontakt-Handles ausgewählt oder erstellt. Das ist nichts Neues und wird hier nicht besprochen. Als nächstes ist die Delegation für die Domain anzugeben. Damit teilt man der Registry mit, welche Nameserver für die Domain zuständig sein sollen. Bei einer DE-Domain hat man hier folgende Möglichkeiten:

  1. Eigene Nameserver
  2. Nameserver der http.net
  3. Nameserver der DENIC (NSentries)

Express-DNS Schritt 2

Wenn man eigene Nameserver verwendet, muss man selbst für die Eintragung einer geeigneten DNS-Zone auf den angegebenen Nameservern sorgen. Wenn man NSentries verwendet, kann man ein paar Resource-Records angeben, die DENIC zusammen mit der Domain einträgt. Wenn Sie unsere Nameserver benutzen, so mussten Sie bisher separat einen Auftrag an unseren DNS-Robot generieren, um die Zone dort einzutragen.

Neu: Wenn Sie unsere Nameserver verwenden, können jetzt gleichzeitig einen Auftrag an den DNS-Robot generieren, so dass zuerst die Zone eingetragen wird. Ganz analog zu NSentries können Sie also hier direkt einige wichtige Resource-Records für die Domain angeben. Das gilt natürlich nicht nur für DE-Domains, sondern für beliebige TLDs. Aktivieren Sie die Checkbox “Zonendaten eintragen” um das Formular zu erweitern:

Express-DNS Schritt 3

Die Syntax der Express-DNS-Einträge orientiert sich an den NSentries. Sie können bis zu 6 Address- und Mail-Exchange-Records eintragen. Wie es geht, sollte schnell klar werden, wenn Sie auf “Beispiel anzeigen” klicken. Dann wird passend zum Domainnamen ein Standard-Beispiel generiert:

Express-DNS Schritt 4

Benutzen Sie die Beispiel-Daten als Vorlage für Ihre eigenen Einträge. Wenn Sie beim Klick auf “weiter” die Checkbox

Die Angaben auf dieser Seite als Standardwerte speichern.

aktiviert haben, werden Ihre Express-DNS-Einträge als Vorlage gespeichert und bei der nächsten Benutzung des Formulars mit dem jeweiligen Domainnamen geladen, so dass Sie Ihre Standard-Konfiguration nur einmal eintragen müssen.

Nachdem Sie auf “weiter” geklickt haben, sehen Sie im letzten Schritt, in der Zusammenfassung des Auftrages, das Template, das an den Domain-Robot gesendet wird. Hier können Sie natürlich auch noch Änderungen vornehmen, wenn Ihr Auftrag spezielle Zusatzangaben erfordert oder Sie etwas ändern möchten:

Express-DNS Schritt 7

Wenn Sie die Express-DNS-Option verwendet haben, sehen Sie hier ein Kombi-Template. Der Domain-Robot sendet den DNS-Teil solcher Templates zunächst an den DNS-Robot und verarbeitet den Domain-Teil zwei bis drei Minuten später, um sicherzustellen, dass die Zone zuerst eingetragen wird, falls dies für den Domain-Auftrag erforderlich ist.

Feedback erwünscht!

Wie bei all unseren Innovationen gilt auch hier: Wir haben versucht, aus Ihren Anregungen, unserer Erfahrung und den technischen Möglichkeiten das aus unserer Sicht Beste zu machen. Am liebsten möchten wir aber das Beste aus der Sicht unserer Partner realisieren. Deshalb: Ideen, Anregungen, Verrisse – alles erwünscht! :-)