Hallo zusammen,
um mein Problem zu verstehen ist es evtl. notwendig meine Architektur zu kennen. Deswegen hier eine kurze Erläuterung.
Ich will meine API über eine URL-Struktur laufen lassen, bei der man keine Felder mitgeben muss.
Beispiel:
…/api/apikey/controller/method/arg1/arg2 …
Dafür benötige ich ja theoretisch für deses weitere „/“ einen existierenden Ordner. Also dachte ich mir, dass ich eine virtuelle Ordner-Struktur aufbaue. Wenn man die API aufruft, wird der Server den Ordner nicht finden, sodass es zu einem 404 kommt. Im 404 Document wird anschließend geprüft ob es ein API-Aufruf ist. Wenn ja, dann wird die API-Klasse instantiiert und dynamisch die Methode aufgerufen, die sich aus /controller/ und /method/ zusammensetzt.
Darüberhinaus wird ein neuer Header( 200 OK ) gesendet, damit der Client keine 404 Meldung bekommt.
Auf meiner Seite rufe ich selbst meine API auf. Die geschieht z.B. bei AJAX-Calls. Dabei wird allerdings nicht direkt die API angesprochen sondern ein API-Proxy, welcher meinen API-Key mit dranhängt.
Um den ganzen Prozess zu veranschaulichen hier eine kleine Grafik:
Logout Button > AJAX Funktion > API-Proxy > virtuelle API URL > 404 Dokument > Tatsächliches API-Objekt
Das Ganze funktioniert auch wunderbar auf meinem lokalen XAMPP. Als ich es aber auf meinen bplaced Webspace hochgeladen habe entsteht ein merkwürdiges verhalten.
Bei jedem API-Aufruf logge ich diesen. Über bplaced sind nach oben aufgeführten Beispiel 9 Datensätze (API-Calls) in der Datenbank.
Rufe ich direkt die API auf - also ab virtuelle API URL - habe ich 3 Datensätze in der Datenbank.
Ich habe mir für jeden Datensatz $_SERVER und Header-Daten ausgeben lassen.
Header:
{„X-Ud-Loopcount“:„0“,„User-Agent“:„www.bplaced.net“,„Connection“:„close“,„Accept“:"/",„Host“:„janseidel.bplaced.net“}
Dabei geht der Loopcount immer von 0 - 2. Also sieht der Loopcount bei 9 Datensätzen wie folgt aus: 0 1 2 0 1 2 0 1 2.
Man könnte also sagen es wird in 3 Segmente geteilt, jeweils 0 1 2.
Die Server-Daten sehen alle sehr identisch aus. Im Folgenden Loopcount 0 - 2:
„REQUEST_METHOD“:„HEAD“
„REQUEST_METHOD“:„GET“
„REQUEST_METHOD“:„HEAD“
Was vielleicht auch von Bedeutung sein kann ist
„REDIRECT_STATUS“:„200“,
„REDIRECT_HANDLER“:„application/x-httpd-php“,"
„REDIRECT_REDIRECT_STATUS“:„200“
Was mich auch irritiert ist, dass wenn ich in der API-Log-Methode ein echo einbaue, dann wird mir dieses nur 1 mal ausgegeben. So wie es hier läuft müsste es ja 9 bzw min. 3 mal aufgerufen werden.
Wie gesagt, passiert das alles nur auf dem bPlaced-Webspace. Lokal funktioniert alles super.
Hat jemand eine Ahnung woran es liegen kann, dass im Hintergrund das Script mehrmals ausgeführt wird? ich bin mit meinem Latein langsam am Ende und hoffe, dass ihr mir Hinweise geben könnt.
Vielen Dank schonmal im Voraus.
Mfg Jan