franc
Goto Top

Webservice - Parameter direkt nach dem Slash übergeben

Hallo

ich bräuchte einen Fingerzeig, wie ich meinen PHP-Webservice (eine einfache Abfrage an eine Datenbank) nicht mit den normalen GET-Parametern (?param1=wert1&param2=wert2&paramN=wertN), sondern per Unterseite, also etwa:
https://example.org/webservice/param1/wert1/
oder wenigstens:
https://example.org/webservice/param1=wert1

Ich hab da was im Hinterkopf, dass es da so was gibt, aber ich komm nicht drauf was das war.
Einen MQTT Server möchte ich jedenfalls nicht installieren, dann würde ich eher noch die alten GET-Parameter nehmen.

Danke für einen Tipp...

Gruß franc

Content-ID: 5551448347

Url: https://administrator.de/contentid/5551448347

Ausgedruckt am: 21.11.2024 um 19:11 Uhr

110135
Lösung 110135 22.01.2023 um 10:41:08 Uhr
Goto Top
Hi,

Sowas nennt sich rewrite und läuft im Apache zb über den mod_rewrite

Zb: https://www.html-seminar.de/mod_rewrite-urls-umwandeln.htm
5175293307
Lösung 5175293307 22.01.2023 aktualisiert um 11:03:00 Uhr
Goto Top
Entweder mit Rewrite in der .htaccess entsprechend umschreiben, dann brauchst du dein Skript nicht anpassen, oder manuell den Docment-Path in PHP
 $_SERVER['REQUEST_URI']  
mittels slash splitten wenn du es umbauen willst.
https://tio.run/##K8go@P/fxr4go4BLJT7YNSjMNShaPcg1MNQ1OCQ@NMhTPVbBVkFdPy ...
franc
franc 22.01.2023 aktualisiert um 13:13:20 Uhr
Goto Top
Super, danke!
Ich weiß jetzt wieder, was ich von damals im Hinterkopf hatte, REST: Einfache REST-API mittels PHP bzw.: How to Build a Simple REST API in PHP

Aber das REQUEST_URI passt ja ideal für meine Bedürfnisse face-smile
Also das Beispiel:

<?php
$_SERVER['REQUEST_URI'] = '/bla/blub';  
$matches = preg_split('/\//',$_SERVER['REQUEST_URI'],0,PREG_SPLIT_NO_EMPTY);  
print_r($matches);
?>

macht ja genau das. Und der (indirekte) Tipp mit dem TIO (https://tio.run/) ist ja auch super, kannte ich noch nicht, ist ja sehr praktisch, danke!

Gruß franc
franc
franc 23.01.2023 aktualisiert um 10:34:43 Uhr
Goto Top
Zitat von @5175293307:

... oder manuell den Docment-Path in PHP
...
Moment mal, jetzt kommt mir ein Zweifel, mit PHP kann ich es ja gar nicht auswerten, weil der Apache bei Eingabe eines weiteren Slashs ja erst mal dort eine Resource sucht (eine index.php zB), also im Unterverzeichnis, das es ja gar nicht gibt. Dann gibt er ein 404 zurück. Also bei etwa:
https://example.org/webservice/parameter/wert/
würde Apache im Unterverzeichnis "wert" (schon das Unterverz. "parameter" gibt es ja nicht) nach einer index.php (bzw. index.html) suchen. Findet er die nicht, gibt er ein 404 zurück.
Es geht wohl nur mit Rewrite in der .htaccess also etwa:

RewriteEngine on 
RewriteRule ^([^/]+)/$ search.php?search_key=$1

eine Anfrage mit etwa:

https://example.org/webservice/wert/

würde dann so weitergegeben:

https://example.org/webservice/search.php?search_key=wert

Ohne ein Zeichen greift die Regel nicht und die normale index.php würde aufgerufen, mit auch nur einem Zeichen nach dem Slash (nach webservice) wird mit Parameter auf die search.php umgeleitet.

Ich brauch nur einen Parameter, bei mehren würde es komplizierter werden, weil ich dann mehre "/" auswerten müsste und in die Regex kriegen (ohne dass dann gar nichts gefunden würde etc.).