Comment utiliser l'API JSON d'Akeeba Backup Pro dans votre extension pour Joomla!

Comment utiliser l'API JSON d'Akeeba Backup Pro dans votre extension pour Joomla!

Bonjour chers lecteurs,


Aujourd’hui je vous présente mon retour d’expérience sur l’utilisation de l’API JSON d’Akeeba Backup Pro.


Etant moi-même heureux possesseur d’une licence d’Akeeba Backup Pro,

quoi de plus normal que d’aider la communauté de développeurs Joomla! et PHP à utiliser pleinement ce puissant outil incontournable qu’est Akeeba Backup Pro.


Dans ce court article je ne présente qu’un cas d’utilisation. Mais je vous laisse imaginer le potentiel incroyable qu’offre cette API. Essayez par vous même. Explorez, partagez vos trouvailles!


J’imagine bien pouvoir faire communiquer en tandem l’API d’Akeeba et l’API d’OVH par exemple pour optimiser les tâches qui pourraient, autrement, êtres répétitives, fastidieuses donc sources d’erreurs éventuelles.


/**

* Encodes the method parameters in a way that our remote API understands

*

* @param string $method    Which method of the remote API to use

* @param array  $params    A key=>value array with the method's parameters

* @param string $component [optional] Receiving component. Skip to use com_akeeba.

*

* @return array

* @see https://github.com/nikosdion/Akeeba-Example/blob/master/application/components/com_akeebaexample/helpers/api.php at line 148

*/

private function prepareQuery($method, $params, $component = 'com_akeeba')

{

 $secret = 'frontend backup secret key akeeba backup pro’;

 $body   = array(

    'method' => $method,

    'data'   => (object) $params

 );


// added strval to work with strict_type in php7.1

$salt              = md5(strval(microtime(true)));   

$challenge         = $salt . ':' . md5($salt . $secret);

 $body['challenge'] = $challenge;

 $bodyData          = json_encode($body);

 $query             = array(

    'option' => $component,

    'view'   => 'json',

    'json'   => json_encode(array(

       'encapsulation' => 1,

       'body'          => $bodyData

    ))

 );

 $query['format']   = 'component';


 return $query;

}










A partir d’ici c’est le code personnalisé que j’ai écrit. Il s’agit de méthodes à mettre dans la même classe php que la méthode ci-dessus. Ce sont juste des exemples. Ce sont des appels à l’API JSON d’Akeeba Backup disponible pour la version pro. La documentation est ici




public function callAkeebaApiGetVersion()

{

 $request  = new Http();

 $query    = $this->prepareQuery('getVersion', []);

 $url      = 'https://www.example.com/';

 $response = $request->get($url . '?' . http_build_query($query));


 var_dump($response->body);

 jexit();

}















public function callAkeebaApiGetIncludedDBs()

{

 $request = new Http();

 $profile_id = 1;

 $query   = $this->prepareQuery('getIncludedDBs', ['profile' => $profile_id]);

 $url     = 'https://www.example.com/';


 $response = $request->get($url . '?' . http_build_query($query));


 var_dump($response->body);

 jexit();

}




public function callAkeebaApiSetIncludedDB()

{

 $request = new Http();

 $url     = 'https://www.example.com/';


 $profile_id = 1;

 $start      = 1;

 $limit      = 250; //example to generate 250 configs by code


 for ($counter = $start; $counter <= $limit; $counter++)

 {

    $connection_object = ['host'     => 'localhost',

                          'port'     => 3306,

                          'driver'   => 'pdomysql',

                          'user'     => 'some_user' . $counter,

                          'password' => ‘generate_safe_password’. $counter,

                          'database' => 'some_database_name_' . $counter,

                          'prefix'   => 'some_prefix_'

    ];

    $query             = $this->prepareQuery('setIncludedDB',

       [

          'profile'    => $profile_id,

          'name'       => 'some_database_name' . $counter,

          'connection' => (object) $connection_object,

          'test'       => true

       ]);


    $response = $request->get($url . '?' . http_build_query($query));

 }

 var_dump($response->body);

 jexit();

}