REST API läuft immer gegen 7431 Route Not Found

  • 28 August 2021
  • 5 Antworten
  • 120 Ansichten

Egal ob mit oder ohne Parameter: Die Rest-API liefert bei diversen probierten Requests den Fehler Route Not Found:

https://mydomain.xyz/api/v1/artikelhttps://mydomain.xyz/api/v1/adressenhttps://mydomain.xyz/api/v2/adressen

Das war nicht immer so, aber ich habe es nun gemerkt, da mein Skript zum Datenabzug nicht mehr funktioniert.


5 Antworten

Benutzerebene 4
Abzeichen +2

Hm, bei mir funktioniert es heute Morgen... z.B.

curl --digest -su "$XENTRAL_API_USER_SCRIPT_USER:$XENTRAL_API_USER_SCRIPT_PASSWORD" "$XENTRAL_API_URL_V1/belege/auftraege/63"

Wie sieht denn dein Befehl aus? Kann es an irgendwelchen Headern liegen?

(Deine Beispiel-Routen habe ich nicht ausprobiert, bzw. kommt da bei mir Missing Permission, weil nicht freigegeben.)

Danke dir.

Ich nutze den PHP Client aus der Doku, habe auch nochmal geschaut, ob da alles passt.

Mit deinem Command bekomme ich auch den Fehler Route Not Found, egal welchen Endpunkt ich nehme

Benutzerebene 4
Abzeichen +2

Vllt ist was bei einem Update schiefgegangen? Ist bei dir Xentral in der Cloud oder selbst-gehosted? Bei Cloud würde ich direkt ein Ticket anlegen.

Hallo,

das Problem hatten wir auch. Du kannst Dir damit behelfen, dass Du für die API Aufrufe die Failsafe-URLs verwendest:

https://mydomain.xyz/api/index.php?path=/v1/artikelhttps://mydomain.xyz/api/index.php?path=/v1/adressenhttps://mydomain.xyz/api/index.php?path=/v2/adressen

Also mit api/index.php?path=... statt /api/v1/...

Hi zusammen,

Dear Thread ist zwar schon ziemlich alt, das Thema hatte uns aber auch gerade beschäftigt.

Die unter https://update.xentral.biz/apidoc/docs203.html#webserver_konfiguration angegebene Beispiel-Konfiguration für NGINX scheint einen Fehler in der rewrite-rule zu haben.

 

Lösung für uns:

Anstelle von

location @xentral_api {
rewrite ^/api/(.*)$ /api/index.php/$1 last;
}

muss das heißen

location @xentral_api {
rewrite ^/api/(.*)$ /api/index.php?path=/$1 last;
}

 

Wie bin ich drauf gekommen:

in der server-direktive in der Nginx Config (z.B. /etc/nginx/sites-available/default) die beiden Zeilen

error_log /var/log/nginx/error.log notice;
rewrite_log on;

hinzufügen (bzw. die entsprechenden Einträge anpassen, falls sie schon existieren).

Nginx Config neu laden (zB über sudo service nginx restart)

Damit werden die ausgeführten Rewrites im error.log ausgegeben (Log-Level notice).

Dort sieht man dann schön was er aus dem request macht.

Zum Beispiel:

2023/01/19 09:56:41 [notice] 26197#26197: *36 "^/api/(.*)$" matches "/api/v1/belege/auftraege/12345", client: 172.31.9.xxx, server: _, request: "GET /api/v1/belege/auftraege/12345 HTTP/1.1", host: "wawi.pumperlgsund-bio.de"
2023/01/19 09:56:41 [notice] 26197#26197: *36 rewritten data: "/api/index.php/v1/belege/auftraege/12345", args: "", client: 172.31.9.xxx, server: _, request: "GET /api/v1/belege/auftraege/12345 HTTP/1.1", host: "mein-wawi-system.de"

 

Die korrekte URL sollte aber lauten

/api/index.php?path=/v1/belege/auftraege/12345

und das ist genau der Teil, den wir oben in die rewrite rule einfügen.

 

 

Denkt dran, die beiden Zeilen für das error-logging wieder raus zu nehmen und die nginx config wieder neu zu laden, sonst gibt’s bald Probleme mit dem Platten-Platz :)

Antworten