Module Web Services API REST (développeur): Difference between revisions

Jump to navigation Jump to search
m
Document SQL operators, remove deprecated cURL close
m (Updating interlang links (links to translated versions of this page in other languages) triggered by origin English page "Module_Web_Services_API_REST_(developer)" update.)
m (Document SQL operators, remove deprecated cURL close)
Tag: 2017 source edit
 
Line 24: Line 24:




= Fonction =
=Fonction=
Quand ce module est activé, vous activez l'utilisation des Webservices fournis par Dolibarr. Vous pouvez alors faire des appels REST sur différents Webservices fournis par Dolibarr.
Quand ce module est activé, vous activez l'utilisation des Webservices fournis par Dolibarr. Vous pouvez alors faire des appels REST sur différents Webservices fournis par Dolibarr.


= Installation =
=Installation=


Pour l'installer, ouvrez la page des modules et activez le module "API REST".
Pour l'installer, ouvrez la page des modules et activez le module "API REST".


Une fois que le module Web services REST est activé, Dolibarr devient également un serveur de Web services REST. Vous pouvez alors envoyer vos propres requêtes sur l'url relative :
Une fois que le module Web services REST est activé, Dolibarr devient également un serveur de Web services REST. Vous pouvez alors envoyer vos propres requêtes sur l'url relative<span> </span>:
'''/api/index.php/xxx''' où xxx est l'API à appeler.
'''/api/index.php/xxx''' où xxx est l'API à appeler.


= Liste des services fournis =
=Liste des services fournis=
Seuls quelques services sont disponibles. À compter de la version 5.0 de Dolibarr, vous pouvez consulter la liste complète des web services proposés en appelant l'explorer à cette adresse :
Seuls quelques services sont disponibles. À compter de la version 5.0 de Dolibarr, vous pouvez consulter la liste complète des web services proposés en appelant l'explorer à cette adresse<span> </span>:


'''http://yourdolibarrurl/api/index.php/explorer'''.
'''http://yourdolibarrurl/api/index.php/explorer'''.


Par exemple, vous pouvez essayer l'explorateur sur l'instance de démonstration à l'adresse suivante :  
Par exemple, vous pouvez essayer l'explorateur sur l'instance de démonstration à l'adresse suivante<span> </span>:  


'''https://demo.dolibarr.org/api/index.php/explorer'''
'''https://demo.dolibarr.org/api/index.php/explorer'''
Line 54: Line 54:
Sur cette page d'exploration de l'API, vous pouvez faire beaucoup de tests. Lire des données de Dolibarr et écrire, modifier et supprimer également. Attention: les données sont vraiment modifiées dans votre base de données.
Sur cette page d'exploration de l'API, vous pouvez faire beaucoup de tests. Lire des données de Dolibarr et écrire, modifier et supprimer également. Attention: les données sont vraiment modifiées dans votre base de données.


= Utilisation =
=Utilisation=


Grosso modo, pour utiliser REST, il faut appeler une url du genre suivant <nowiki>http://<mon_serveur>/api/index.php/<action></nowiki><br/>
Grosso modo, pour utiliser REST, il faut appeler une url du genre suivant <nowiki>http://<mon_serveur>/api/index.php/<action></nowiki><br />
avec une des 4 méthodes : GET, POST, PUT, DELETE, en remplaçant <action> par l'action sur laquelle vous voulez intervenir. Ex : <nowiki>http://<mon_serveur>/api/index.php/invoices</nowiki>
avec une des 4 méthodes<span> </span>: GET, POST, PUT, DELETE, en remplaçant <action> par l'action sur laquelle vous voulez intervenir. Ex<span> </span>: <nowiki>http://<mon_serveur>/api/index.php/invoices</nowiki>




Line 109: Line 109:


     $result = curl_exec($curl);
     $result = curl_exec($curl);
    curl_close($curl);


     return $result;
     return $result;
Line 117: Line 115:


Ce n'est qu'un exemple, ce n'est pas sécurisé, cela ne prend pas en compte les codes erreurs mais vous pouvez le modifier et l'adapter à vos besoins.
Ce n'est qu'un exemple, ce n'est pas sécurisé, cela ne prend pas en compte les codes erreurs mais vous pouvez le modifier et l'adapter à vos besoins.
la fonction prend 4 paramètres :
la fonction prend 4 paramètres<span> </span>:
* $method : string "GET", "POST", "PUT", "DELETE"
 
* $apikey : string "votre <token> généré plus haut"
*$method<span> </span>: string "GET", "POST", "PUT", "DELETE"
* $url : string l'url à appeler. Ex : "<nowiki>http://<mon_serveur>/api/index.php/invoices</nowiki>"
*$apikey<span> </span>: string "votre <token> généré plus haut"
* $data : string flux au format json. Ce champ est requis pour les appels POST ou PUT.
*$url<span> </span>: string l'url à appeler. Ex<span> </span>: "<nowiki>http://<mon_serveur>/api/index.php/invoices</nowiki>"
*$data<span> </span>: string flux au format json. Ce champ est requis pour les appels POST ou PUT.
 
=Exemples avec PHP=


= Exemples avec PHP =
Maintenant, quelques exemples opérationnels pour différents cas d'utilisation.<br />


Maintenant, quelques exemples opérationnels pour différents cas d'utilisation.<br/>
Dans tous les cas, on a<span> </span>:


Dans tous les cas, on a :
*$apiKey = "<mon token>";
* $apiKey = "<mon token>";
*$apiUrl = "<nowiki>http://<mon_serveur>/api/index.php/</nowiki>";
* $apiUrl = "<nowiki>http://<mon_serveur>/api/index.php/</nowiki>";




Line 146: Line 146:
}
}
</syntaxHighlight>
</syntaxHighlight>
Commentaires :
Commentaires<span> </span>:
* récupérer les 10'000 premiers produits triés par leur id dans la base
 
* html_entity_decode est nécessaire car les apostrophes sont encodés
*récupérer les 10'000 premiers produits triés par leur id dans la base
* il est facile d'utiliser la même méthode (en remplaçant products par dictionnarycountries) pour récupérer la liste des pays
*html_entity_decode est nécessaire car les apostrophes sont encodés
*il est facile d'utiliser la même méthode (en remplaçant products par dictionnarycountries) pour récupérer la liste des pays




Line 162: Line 163:
$newProductResult = json_decode($newProductResult, true);
$newProductResult = json_decode($newProductResult, true);
</syntaxHighlight>
</syntaxHighlight>
Commentaires :
Commentaires<span> </span>:
* avant de créer un produit, il peut être sage de vérifier qu'il existe. En reprenant le premier exemple, cela fait :
 
*avant de créer un produit, il peut être sage de vérifier qu'il existe. En reprenant le premier exemple, cela fait<span> </span>:




Line 194: Line 196:
}
}
</syntaxHighlight>
</syntaxHighlight>
Commentaires :
Commentaires<span> </span>:
* je regarde si la référence de mon article existe dans le tableau créé dans le premier exemple.
 
* si elle existe, j'utilise sa clé dans le tableau comme id
*je regarde si la référence de mon article existe dans le tableau créé dans le premier exemple.
* si elle n'existe pas, je crée l'article puis le j'ajoute à mon tableau pour les prochaines fois et je récupère l'id créé
*si elle existe, j'utilise sa clé dans le tableau comme id
* cette méthode permet de limiter les appels API quand on doit importer 500 commandes par exemple. Récupérer une fois la liste des produits au début au lieu de chercher à chaque fois dans Dolibarr.
*si elle n'existe pas, je crée l'article puis le j'ajoute à mon tableau pour les prochaines fois et je récupère l'id créé
*cette méthode permet de limiter les appels API quand on doit importer 500 commandes par exemple. Récupérer une fois la liste des produits au début au lieu de chercher à chaque fois dans Dolibarr.




Line 246: Line 249:
}
}
</syntaxHighlight>
</syntaxHighlight>
Commentaires :
Commentaires<span> </span>:
* $clientDoliId vaut l'id du client dans la base doli. Soit vous le connaissez, soit vous pouvez le chercher auparavant
 
* type => 0, c'est une commande client (par opposition à 1 = commande fournisseur)
*$clientDoliId vaut l'id du client dans la base doli. Soit vous le connaissez, soit vous pouvez le chercher auparavant
*type => 0, c'est une commande client (par opposition à 1 = commande fournisseur)




Line 260: Line 264:
$newCommandeValiderResult = json_decode($newCommandeValiderResult, true);
$newCommandeValiderResult = json_decode($newCommandeValiderResult, true);
</syntaxHighlight>
</syntaxHighlight>
Commentaires :
Commentaires<span> </span>:
* on voit dans cet exemple, en avant dernière lignes, on a : $apiUrl."orders/".$newCommandeResult."/validate".<br/>
 
*on voit dans cet exemple, en avant dernière lignes, on a<span> </span>: $apiUrl."orders/".$newCommandeResult."/validate".<br />
 
$newCommandeResult est l'id de la commande crée (récupéré dans l'exemple précédent)
$newCommandeResult est l'id de la commande crée (récupéré dans l'exemple précédent)


Line 276: Line 282:
), true);
), true);
</syntaxHighlight>
</syntaxHighlight>
Commentaires :
Commentaires<span> </span>:
* limit => 1 pour ne renvoyer que 1 client
 
* mode => 1 car on cherche un client (on aurait aussi pu chercher un fournisseur qui est aussi un tiers mais avec un statut différent)
*limit => 1 pour ne renvoyer que 1 client
* sqlfilters syntaxe un peu particulière mais il y a qq autres exemples sur la page d'explorer d'API
*mode => 1 car on cherche un client (on aurait aussi pu chercher un fournisseur qui est aussi un tiers mais avec un statut différent)
*sqlfilters syntaxe un peu particulière mais il y a quelques autres exemples sur la page d'explorer d'API Et est validée par une regex: https://github.com/Dolibarr/dolibarr/blob/23.0/htdocs/core/lib/functions.lib.php#L15657  La liste des opérateurs peut être trouvée ici: https://www.dolibarr.org/forum/t/issues-with-sql-filters-in-dolibarr-rest-api/25426/3




Line 294: Line 301:
$clientDoliId = $newClientResult;
$clientDoliId = $newClientResult;
</syntaxHighlight>
</syntaxHighlight>
Commentaires :
Commentaires<span> </span>:
* client => 1 car c'est un client (et pas un fournisseur)
 
* code_client => -1 pour que le code client soit généré automatiquement.
*client => 1 car c'est un client (et pas un fournisseur)
* on récupère l'id du client dans $clientDoliId
*code_client => -1 pour que le code client soit généré automatiquement.
*on récupère l'id du client dans $clientDoliId


= Développer un nouveau service / sa propre API =
=Développer un nouveau service / sa propre API=


Ajouter un nouveau service est aussi facile qu'ajouter un fichier nommé '''api_monmoduleobject.class.php''' dans le dossier '''htdocs/monmodule/class'''.  
Ajouter un nouveau service est aussi facile qu'ajouter un fichier nommé '''api_monmoduleobject.class.php''' dans le dossier '''htdocs/monmodule/class'''.  
Line 309: Line 317:
Les méthodes et paramètres sont détectées en fonction de l'introspection réalisée dans les classes PHP de l'objet ('''htdocs/monmodule/class/object.class.php''') en utilisant les '''annotations''' trouvées dans la classe.
Les méthodes et paramètres sont détectées en fonction de l'introspection réalisée dans les classes PHP de l'objet ('''htdocs/monmodule/class/object.class.php''') en utilisant les '''annotations''' trouvées dans la classe.


Pour une documentation à propos des annotations : https://github.com/Luracast/Restler/blob/master/ANNOTATIONS.md
Pour une documentation à propos des annotations<span> </span>: https://github.com/Luracast/Restler/blob/master/ANNOTATIONS.md




Vous trouverez pas mal d'autres informations dans le code de Dolibarr. Vous trouverez tous les fichiers API de Dolibarr sous le nom '''htdocs/<dossier>/class/api_xxx_class.php'''
Vous trouverez pas mal d'autres informations dans le code de Dolibarr. Vous trouverez tous les fichiers API de Dolibarr sous le nom '''htdocs/<dossier>/class/api_xxx_class.php'''


= Vidéos sur le sujet =
=Vidéos sur le sujet=
<youtube width="200" height="180">WHV22L8enWw</youtube>  
<youtube width="200" height="180">WHV22L8enWw</youtube>  
<youtube width="200" height="180">RPUcoweeuR8</youtube>
<youtube width="200" height="180">RPUcoweeuR8</youtube>
<youtube width="200" height="180">ZwssM-viocM</youtube>
<youtube width="200" height="180">ZwssM-viocM</youtube>
12

edits

Navigation menu