Problème API

C’est la configuration standard de dolibarr sous nginx ?

Bonjour,

Justement peut être revenir sur une configuration vraiment standard de nginx sans les modifications apportées pour Dolibarr.

Mes serveurs CentOS avec nginx ont une configuration standard et fonctionne très bien avec la PR que j’ai faites.

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