Problème API

Vous pouvez me transmettre votre configuration, si c’est possible

Merci d’avance

Je n’ai pas accès aux configurations avant mardi. (les serveurs ne sont pas à moi et je n’ai aucun accès de chez moi.)

Un site avec les configurations par défaut pour CentOS par ex : https://www.linuxtricks.fr/wiki/installer-et-utiliser-nginx-sur-centos-7

Bonjour,

bon je n’ai aucun accès au conf de nginx sur mes serveurs CentOS, je ne suis pas l’administrateur, mais il me confirme (sans vouloir me montrer) que c’est bien les conf par défaut de nginx.

Est-ce que vous avez des améliorations de votre coté ou est-ce toujours le même problème ?

Edit: « Les configurations que nous avons de notre côté sont faites de notre côté et possèdent certaines optimisations. » retour de l’administrateur de mon serveur.

Je vais tenter de faire une install de CentOS sur une virtual box pour voir si je peux reproduire le problème de l’API.

Bonjour,

je n’ai toujours pas pu faire mon vwmare avec CentOS + Lamp par contre certaines installations réagisse plutôt positivement avec le code qui suit:

$url = $_SERVER["PHP_SELF"] . $_SERVER['PATH_INFO'];

Toujours dans le fichier /api/index.php à la ligne 43.

A tester si cela fonctionne.

1 « J'aime »

Bonjour,

je veux essayer de faire ça demain, je vous tiens au courant.

Merci beaucoup

C’est pas mieux, voila ce que j’obtiens :

{« messages »:[« attribute paths is not of type object »],« schemaValidationMessages »:[{« level »:« error »,« domain »:« validation »,« keyword »:« type »,« message »:« instance type (array) does not match any allowed primitive type (allowed: ["object"]) »,« schema »:{« loadingURI »:« http://swagger.io/v2/schema.json#« ,« pointer »: »/definitions/paths"},« instance »:{« pointer »:"/paths »}}]}

var_dump($url) : string(21) « /htdocs/api/index.php »

Bonjour,

J’ai peut être une nouvelle solution qui fonctionnerait sur tous les serveurs avec l’entrée REQUEST_URI manquante. Faire la mise à jour de la ligne dans la dernière réponse de ce lien:

En résumé:

For now, i’m trying to use this one at line 42 of index.php file in « api » folder and it’s working for me.

Change
$url = $_SERVER["SCRIPT_URI"] !== null ? $_SERVER["SCRIPT_URI"] : $_SERVER['PHP_SELF'];

to

$url = $_SERVER["SCRIPT_URI"] !== null ? $_SERVER["SCRIPT_URI"] : $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];

Bonjour ca fonctionnent, juste j’ai cette message :

{« messages »:[« attribute paths.’/login’(post).operationId is repeated »]}

et dans le réponse body

Response Body

API not found (failed to include API file)

Bonjour,

il suffit juste de rentrer le DOLAPIKEY pour s’identifier et normalement c’est bon.

PS: Ok le code que j’ai envoyé n’était pas le bon.

Voici le correctif toujours a appliquer sur la fameuse ligne qu’on modifie depuis le départ :slight_smile:

$url = $_SERVER["SCRIPT_URI"] !== null ? $_SERVER["SCRIPT_URI"] : $_SERVER['HTTP_HOST'] . preg_replace( '/(\?.+)/', '', $_SERVER['REQUEST_URI'] );

PS: La solution est fonctionnelle pour @meuhlavache à la fin de cette discussion: API Rest Explorer ... Questionnement

1 « J'aime »

Bonjour Ca fonctionnent enfin sur la version 10.

Par contre ca fonctionne pas sur la version 11

Sans titre

Dans le fichier index.php qui se trouve dans le sous dossier api, trouve l’occurrence suivante :
$url = $_SERVER[‹ PHP_SELF ›];
// Fix for some NGINX setups (this should not be required even with NGINX, however setup of NGINX are often mysterious and this may help is such cases)
if (! empty($conf->global->MAIN_NGINX_FIX))
{
$url = (isset($_SERVER[‹ SCRIPT_URI ›]) && $_SERVER[« SCRIPT_URI »] !== null) ? $_SERVER[« SCRIPT_URI »] : $_SERVER[‹ PHP_SELF ›];
}

Met /* au tout début de la première ligne et */ à la fin de la dernière ligne (ça transforme le tout en commentaire non interprété).

Ensuite ajoute ça :
$url = $_SERVER["SCRIPT_URI"] !== null ? $_SERVER["SCRIPT_URI"] : $_SERVER['HTTP_HOST'] . preg_replace( '/(\?.+)/', '', $_SERVER['REQUEST_URI'] );

J’espère que ça fonctionnera pour toi !

bonjour ,
je me perds dans toutes les versions publiées de config NGINX publiées.
moi j’ai comme [toolinnn] en Fév 20. sur la page de swagger.

quelle est la config de NGINX avec laquelle la partie API marche en V11 comme en 14 SVP ?

(copiez juste la parte serveur SVP) (ne dites pas « standard » car on ne l’a qu’à l’install et là c’est déjà modifié 100 fois)
merci

Moi je dis Wiki !

merci mais il y a aussi un autre « wiki » :

et avec celui juste donné , la page /api/index.php/explorer va en 404 …
autre idée svp?
à partir du moment où j’ajoute à ta config :
fastcgi_split_path_info ^(.+?.php)(/.*)$;
(sous location ~ [^/].php(/|$) {)
j’ai la page swagger Ui avec 3 lignes :
[Dolibarr REST API
DOLAPIKEY
Explorer]
qui s’affiche, mais pas plus, même avec une clé API
mais cela fait un peu expérimental…

Si on avait un descriptif de ce que fait au niveau « routes », la connexion API (je ne lit pas le php désolé, mais me débrouille en JS et Node et donc un peu en Nginx) , on pourrait paramétrer de manière plus stable cette connexion. Il y a sans doute quelque chose de pas clair dans cette partie pour qu’il y ait autant de contributions disparatres.
Autre idée : mettre une connexion php telle que dans le cas d’un serveur APACHE et pourvoir l’enlever si on a un NGINX au niveau de l’activation du module REST ?

J’ai ça et je pense que l’API fonctionne :

location ~ (.+\.php)(.*)$ {
     add_header "X-Robots-Tag" "noindex";
     include       /etc/nginx/fastcgi.conf;
 
     fastcgi_pass  unix:/var/run/php7-fpm-dol.sock;
     fastcgi_index index.php;
     fastcgi_split_path_info ^(.+\.php)(.*)$;
     fastcgi_param PATH_INFO       $fastcgi_path_info;
     fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
     fastcgi_hide_header X-Frame-Options;
     fastcgi_intercept_errors on;
   }

bonsoir, je te remercie , je l’ai placée /adaptée juste le « pass » chez moi, cela n’a rien changé.
Tu écris « je pense » : mais es-tu sûr ?
L’as-tu testé avec le swagger (activer le plugin Rest, clic sur option « production », créer ou utiliser un login avec une clé API et qq droits et aller sur https://monsite dolibarr//api/index.php/explorer/ et tu as une liste de commandes Rest en mettant la clé API de plus haut ?

oui ça fonctionne

Bonjour,
afin d’aider les développeurs au diagnostic : sur une version 14.0.2 de dolibarr et un Nginx 1.14 avec la config de libremaster ci-dessus,
en cliquant juste depuis la config du module REST, sur :
« Vous pouvez explorer et tester les API par l’URL: »

http://monsite/api/index.php/explorer
j’ai 3 lignes :
Dolibarr REST API
DOLAPIKEY
Explorer

et sous le log d’erreur de ce serveur NGINX les indications du fichier texte joint qui disent bien que cela va chercher les css et tout le nécessaire à l’affichage de swagger sous des répertoires qui n’ont jamais existé à cet endroit.
2111-log-nginx-error.txt (11,7 Ko)

par contre, si on ajoute avant la config Nginx donnée, les 2 lignes :
location ~ ^/api/(?!(index.php))(.*) {
try_files $uri /api/index.php/$2?$query_string; }
en faisant directement une requete GET /api/index.php/explorer/swagger.json?DOLAPIKEY=macle HTTP/2.0", on n’ a pas d’erreur.
Le problème est que la doc de dev de l’API est dans le swagger , donc pas de swagger, pas de dev et pas d’appli…
en espérant avoir aidé à la compréhension de ce qui se passe à cause sans doute du fichier index.php qui se trouve dans le sous dossier api avec Nginx.
merci d’avance de votre aide.

cher amis,
j’ai trouvé ce qui blague et la méthode :
1/la méthode pour avoir la bonne partie de config de Nginx :
suivre : PHP FastCGI Example | NGINX

on arrive donc à un morceau de config :

location ~ [^/]\.php(/|$) {
        fastcgi_split_path_info ^(.+?\.php)(/.*)$;
        if (!-f $document_root$fastcgi_script_name) {
            return 404;
        }

        # Mitigate https://httpoxy.org/ vulnerabilities
        fastcgi_param HTTP_PROXY "";

      	fastcgi_pass   localhost:8004; #ici mettre votre port des sockets de ftm pool..
     
        fastcgi_index  index.php;
        include        fastcgi_params;
        fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param  PATH_INFO       $fastcgi_path_info;
    
    }	

2/ ce qui blague :
mais quand la page http://monsite/api/index.php/explorer affiche que 3 lignes (voir plus haut) , c’est qu’il ne faut PAS mettre comme dans les sites web qui sont optimisés pour un affichage rapide au dessus une instruction Nginx dans le genre:

location ~* \.(css|js|jpg|jpeg|png|gif|ico|woff2)$ {
		expires 30d;
		add_header Cache-Control "public";
	}

Voilà : c’est résolu et cela fonctionne sous Debian 10 , Nginx 1.14, et Dolibarr 11 et (sans doute à) 14
en espérant vous avoir aidé.

1 « J'aime »