Meine API

Ich habe eine kleine API bzw. besser gesagt, eine Abfrage per PHP GET-Methode gebastelt, um die Daten aus meine Datenbank zur Verfügung zu stellen. Aufgerufen wird dies per URL im Browser:

https://codebase.webhafen.de/flightdb/fromhex.php?hex=hexcode

Die komplette Datenbank kann auch hier eingesehen werden:

https://codebase.webhafen.de/flightdb

Statt hexcode muss der ICAO-HEX oder Mode-S-Code angegeben werden. In einem Beispiel sieht das so aus:

https://codebase.webhafen.de/flightdb/fromhex.php?hex=3c6497

Als Ausgabe erscheinen dann meine Daten dazu im JSON-Format:

{"0":"3c6497","icaohex":"3c6497","1":"D-AIDW","registration":"D-AIDW","2":"Airbus","manufacturer":"Airbus","3":"A321 231","type":"A321 231","4":"Lufthansa","airline":"Lufthansa"}

Im Prinzip ist das genau das gleiche, was ich auch bei anderen mache, und hier im Artikel unter Daten ergänzen erklärt habe.

Findet sich in meiner Datenbank zwar ein Eintrag zum hex-Code, es sind aber keine Daten hinterlegt, dann sieht die Ausgabe so aus:

{"0":"3c1cd1","icaohex":"3c1cd1","1":"n\/a2","registration":"n\/a2","2":"","manufacturer":"","3":"","type":"","4":"","airline":""}

Kennt meine Datenbank den hex-Code nicht, dann gibt das Script einfach ein „False“ zurück. Um Fehler abzufangen, wird bei einer falschen URL eine Hilfe-Seite ausgegeben. Da der hex-Code nicht länger als sechs Zeichen sein kann, fange ich auch das ab und gebe auch dann eine Fehlermeldung aus.

Um die Datenbank meines Providers nicht zu überlasten, habe ich mir ein einfaches Limit eingebaut. Das Script setzt einen Session-Cookie. In diesem wird die aktuelle Zeit plus 60 Sekunden und ein Counter gespeichert. Jeder Aufruf innerhalb der 60 Sekunden zählt den Counter hoch. Nach 10 Aufrufen wird die Abfrage blockiert und eine Fehlermeldung ausgegeben. Sind die 60 Sekunden abgelaufen, dann löscht das Script beim nächsten Aufruf den Cookie und kann danach erneut zehn Abfragen in 60 Sekunden durchführen.

Mir ist bewusst, dass es Mittel und Wege gibt, dies zu umgehen, doch ich werde das erst mal so beobachten und im Zweifel reagieren.

Hier nun noch der Code:

<?php
session_start();
$max=10;
$maxtime=60;

if (!isset($_SESSION['count'])) {
  $_SESSION['count']=0;
  $_SESSION['time']=time()+$maxtime;
}

if (time() <= $_SESSION['time']) {
  if ($_SESSION['count'] <= $max) {
    if (isset($_GET['hex'])) {
      $hex=$_GET['hex'];
      if (strlen($hex)<7) {
        $db = new SQLite3('flights.db');
        $statement="SELECT icaohex,registration,manufacturer,type,airline FROM flights WHERE icaohex='".$hex."'";
        $result=$db->query($statement);
        $erg=$result->fetchArray();
        echo json_encode($erg);
      } else {
        echo "hex-code to long";
      }
    } else {
      echo "<h3>API-Call:</h3>";
      echo "Open: https://codebase.webhafen.de/flightdb/fromhex.php?hex=hexcode<br>";
      echo "hexcode = 6 digit ICAO-HEX / Mode-S code<br>";
      echo "Example: <a href='https://projekte.webhafen.de/flightdb/fromhex.php?hex=3c6497'>https://projekte.webhafen.de/api/fromhex.php?hex=3c6497</a>";
    }
  } else {
    echo "To much calls - Call limit 10 per 60 seconds";
  }
  $_SESSION['count']=$_SESSION['count']+1;
} else {
  session_unset();
  session_destroy();
}

Beitrag veröffentlicht

in

von

Schlagwörter:

Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert