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

Printed on: October 4, 2024 at 02:10 o'clock

110135
Solution 110135 Jan 22, 2023 at 09:41:08 (UTC)
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
Solution 5175293307 Jan 22, 2023 updated at 10:03:00 (UTC)
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 Jan 22, 2023 updated at 12:13:20 (UTC)
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 Jan 23, 2023 updated at 09:34:43 (UTC)
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.).