12
edits
PolyglotBot (talk | contribs) 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.) |
Williamdes (talk | contribs) 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); | ||
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= | |||
Maintenant, quelques exemples opérationnels pour différents cas d'utilisation.<br /> | |||
Dans tous les cas, on a<span> </span>: | |||
*$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 | *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> | ||
edits