Problème API

Bonjour à tous,

Je rencontre le même problème sur une update de dolibarr 10.0.1

J’ai bien généré un clé api pour le super utilisateur, et que je la saisisse dans l’explorer ou non, j’ai ça :

{« 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 »}}]}

auriez vous une solution ?

Bonjour,

Vous essayez d’acceder à quelle adresse ?

Bonjour,

Quand j’accède à l’URL : https://domaine/htdocs/api/index.php/explorer

quand j’entre dolikey est appui sur explorer rien s’affiche

Sanstitre.png

Cordialement

Bonjour,

auriez vous une solution ?

Bonjour,

Quel est le serveur Web utilisé ? Apache2 ou nginx ?
Vérifier aussi les logs serveurs (PHP).

Bonjour,

Le serveur utiliser est nginx :

        location / {
                index index.php index.html index.htm;
                try_files $uri $uri/ /index.php?q=$request_uri;
        }

        # REST API support
        location /htdocs/api {
            if ( !-e $request_filename) {
                rewrite ^.* /htdocs/api/index.php last;
            }
        }

        location ~ \.php$ {
            fastcgi_pass   xxxxxxxxx-sock;
            fastcgi_index  index.php;
            fastcgi_read_timeout 180;
            fastcgi_split_path_info ^(.+\.php)(/.*)$;
            fastcgi_param PHP_VALUE open_basedir="/home/xxxxxxx/www:/tmp";
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
             # Dolibarr Rest API path support
            fastcgi_param  PATH_INFO       $fastcgi_path_info;
            fastcgi_param  PATH_TRANSLATED $document_root$fastcgi_script_name;
            include fastcgi_params;
        }

C’est sûr qu’il y a un truc pas clair avec l’API REST quand le serveur Web utilisé est nginx (j’en ai fait les frais également).
Je pense qu’il faudrait voir au niveau du code pour faire définitivement un FIX sous forme d’une PR GitHub car les différentes bidouilles pour définir le PATH / PATH_INFO / PATH_TRANSLATED ne sont pas hyper perennes.

Voici la config que j’ai pour un nginx 1.16.1 sous Debian Buster :

location ~ [^/]\.php(/|$) {
        fastcgi_read_timeout 180;
        fastcgi_split_path_info ^(.+\.php)(/.*)$;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_script_name;
        fastcgi_param  PATH_TRANSLATED    $document_root$fastcgi_path_info;
        fastcgi_index index.php;
        include fcgi.conf;
        fastcgi_pass xxxxxxxxxxxx.sock;
}

Avec cette config, chez moi pas de soucis (mais peut-être que ça ne fonctionnera pas chez vous ;))

Quelle est la distrib et comment nginx a t’il été installé (dépôts de la distrib ou dépôts officiels de nginx) ?

bonjour,

quand j’utilise votre configuration j’ai le message : API not found (failed to include API file)

nginx version: nginx/1.17.3

cat /etc/yum.repos.d/nginx.repo
#--------------- On CentOS 7 ---------------
[nginx]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key

je suis sur centos : CentOS Linux release 7.7.1908 (Core)

Et en laissant include fastcgi_params; au lieu de include fcgi.conf; ?

Quelque part, vu que c’est une CentOS, ça ne m’étonne pas que ça soit différent, par contre, là tout de suite je n’en ai pas sous la main pour tester :wink:

Pourquoi avoir rajouté ceci ?

REST API support

    location /htdocs/api {
        if ( !-e $request_filename) {
            rewrite ^.\* /htdocs/api/index.php last;
        }
    }

Normalement on a juste à avoir un un handler sur la racine de dolibarr. Le chemin /api étant une url de dolibarr comme les autres.

je trouver ca sur internet, en plus ca fonctionnent bien avant que fasse un mise à jour de dolibarr vers 10.0.2

Bonjour,

J’ai ouvert une PR sur GitHub qui permet de résoudre le problème. La solution n’est peut être pas la plus optimale mais elle mérite d’être fonctionnelle: https://github.com/Dolibarr/dolibarr/pull/12089

Bonjour,

merci beaucoup pour votre réponse

je fais les modifications, mais ça fonctionnent toujours pas pour moi

{"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"}}]}

Est-il possible de voir votre fichier index.php dans votre dossier /api/index.php

Vous avez bien mis à jour les deux preg_match avec $url ?


Oui, je télécharger le dossier qui vous avez modifier ( commit 2c06969 ) api entier et je le écraser avec le nouveau.

Est-il possible de rajouter en dessous de la ligne 42 la ligne ci-dessous:
var_dump( $url );

Ensuite actualiser la page de l’exploreur de l’API /explorer: <votresite>/api/index.php/explorer

Et ensuite copier coller le premier message afficher en haut de page (qui sera blanche du coup), de mon coté:
http://127.0.0.1/dolibarr/api/index.php/explorer/

de mon cote le var_dump($url)

[code]
string(21) « /htdocs/api/index.php »[/code

La valeur ne correspond pas à la valeur attendu.

On vas continuer de chercher ensemble, c’est pratique pour avancer;

Que donne un:

var_dump($_SERVER['SCRIPT_URI']);

(Toujours au niveau de la même ligne)

var_dump($_SERVER['SCRIPT_URI']) : NULL

var_dump($_SERVER['PHP_SELF']) : string(21) "/htdocs/api/index.php"

ma config nginx :

        location / {
                index index.php index.html index.htm;
                try_files $uri $uri/ /index.php?q=$request_uri;
        }

        # REST API support
        location /htdocs/api {
            if ( !-e $request_filename) {
                rewrite ^.* /htdocs/api/index.php last;
            }
        }

        location ~ \.php$ {
            fastcgi_pass   dolibarr.fr-sock;
            fastcgi_index  index.php;
            fastcgi_read_timeout 180;
            fastcgi_split_path_info ^(.+\.php)(/.*)$;
            fastcgi_param PHP_VALUE open_basedir="/home/dolibarr.fr/www:/tmp";
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
             # Dolibarr Rest API path support
            fastcgi_param  PATH_INFO       $fastcgi_path_info;
            fastcgi_param  PATH_TRANSLATED $document_root$fastcgi_script_name;
            include fastcgi_params;
        }

Je pense qu’il faudrait revenir a la configuration par défaut de nginx