Plugins
Marché des plugins
- DBAPI fournit officiellement plusieurs plugins couramment utilisés ; vous pouvez télécharger ces plugins sur le marché des plugins.
Rôle des plugins
- Les plugins de DBAPI se répartissent en cinq catégories : plugins de conversion de données, plugins de cache, plugins d’alerte, plugins globaux de conversion de données et plugins de traitement des paramètres.
- Tous les plugins sont des fichiers JAR ; il suffit de placer ces fichiers dans le répertoire
extliboulibde DBAPI, puis de redémarrer l’application pour les utiliser.
Plugin de cache
- Ce plugin permet de mettre en cache les résultats des exécuteurs. Par exemple, pour un exécuteur SQL, les résultats des requêtes SELECT peuvent être stockés en cache afin d’éviter des interrogations fréquentes de la base de données et ainsi réduire la charge sur celle-ci.
- La logique de mise en cache est définie par l’utilisateur, qui peut choisir de stocker les données dans Redis, MongoDB, Elasticsearch, etc.
- Si aucune donnée n’est trouvée dans le cache, l’exécution se poursuit normalement, puis le résultat est mis en cache.
Scénario multi‑requêtes avec l’exécuteur SQL
Lorsque l’exécuteur SQL contient plusieurs instructions SQL, le plugin de cache encapsule les résultats de toutes ces requêtes (si une seule instruction dispose d’un plugin de conversion, ce dernier sera appliqué avant le stockage) et met ensuite l’ensemble en cache.
Plugin d’alerte
- Lorsqu’une erreur interne survient au sein d’une API, le plugin d’alerte peut envoyer des notifications d’alerte, par e‑mail, SMS, etc.
- La logique d’alerte est définie par l’utilisateur.
Plugin de conversion de données
- Parfois, une requête SQL ne permet pas d’obtenir directement les données au format souhaité ; dans ce cas, il est plus pratique d’utiliser un plugin de conversion de données pour traiter et transformer les données via du code personnalisé.
- Par exemple, on peut anonymiser ou masquer certaines informations comme les numéros de téléphone ou les numéros de carte bancaire dans les résultats d’une requête SQL.
Scénario multi‑requêtes avec l’exécuteur SQL
Dans le cas d’un exécuteur SQL contenant plusieurs instructions, chaque instruction possède son propre plugin de conversion de données ; ce plugin s’applique toujours aux résultats d’une seule requête SQL.
Plugin global de conversion de données
- Par défaut, les données renvoyées par une API ont le format suivant :
{success:true,msg:xxx,data:xxx}. - Dans certains cas, il est nécessaire de modifier le format des données de réponse ; par exemple, le framework low‑code frontal AMIS exige que les interfaces retournent des données incluant un champ
status. Dans ce cas, le plugin global de conversion de données permet de reformater l’ensemble des données renvoyées par l’API.
Différence entre le plugin de conversion de données et le plugin global de conversion de données
Le plugin de conversion de données transforme uniquement les résultats d’un exécuteur spécifique (par exemple, les résultats d’une requête SQL), tandis que le plugin global de conversion de données modifie le format de l’ensemble des données renvoyées par l’API.
Plugin de traitement des paramètres
- Ce plugin permet d’effectuer des traitements personnalisés sur les paramètres de requête.
- Par exemple, convertir toutes les valeurs des paramètres en majuscules.
- Ou encore, si l’API reçoit des paramètres chiffrés, déchiffrer leurs valeurs selon une logique définie par l’utilisateur.
- Enfin, lors d’une requête paginée, ajouter un paramètre
offsetdont la valeur est calculée comme suit :(pageNo - 1) * pageSize.
Notes sur la prise en charge des versions
Le plugin de traitement des paramètres est pris en charge à partir de la version personnelle 4.0.16 et de la version entreprise 4.1.10.
Processus de développement des plugins
Préparation
- Les plugins sont développés en Java ; assurez-vous d’avoir installé un environnement de développement Java (version 8 ou supérieure), puis créez un projet Maven et ajoutez la dépendance
dbapi-plugindans votre fichier pom.xml :
<dependency>
<groupId>com.gitee.freakchicken.dbapi</groupId>
<artifactId>dbapi-plugin</artifactId>
<version>4.0.16</version>
<scope>provided</scope>
</dependency>Développement du plugin
Développement du plugin de cache
- Créez une classe Java implémentant l’interface
com.gitee.freakchicken.dbapi.plugin.CachePlugin:
import com.gitee.freakchicken.dbapi.common.ApiConfig;
import com.gitee.freakchicken.dbapi.plugin.CachePlugin;
import java.util.Map;
public class Cdemo extends CachePlugin {
/**
* Nom du plugin, affiché sur l’interface utilisateur.
*
* @return
*/
@Override
public String getName() {
return null;
}
/**
* Description fonctionnelle du plugin, affichée sur l’interface utilisateur.
*
* @return
*/
@Override
public String getDescription() {
return null;
}
/**
* Description des paramètres du plugin, affichée sur l’interface utilisateur.
*
* @return
*/
@Override
public String getParamDescription() {
return null;
}
/**
* Méthode d’initialisation du plugin, exécutée une seule fois lors de l’instanciation.
* Elle sert généralement à créer un pool de connexions.
*/
@Override
public void init() {
}
/**
* Méthode de configuration du cache :
*
* @param config Configuration de l’API
* @param requestParams Paramètres de la requête
* @param data Données à mettre en cache
* @param localPluginParam Paramètres locaux du plugin
*/
public void set(ApiConfig config, Map<String, Object> requestParams, Object data, String localPluginParam) {
}
/**
* Méthode de suppression de tous les éléments en cache :
*
* @param config Configuration de l’API
* @param localPluginParam Paramètres locaux du plugin
*/
public void clean(ApiConfig config, String localPluginParam) {
}
/**
* Méthode de récupération des données en cache :
*
* @param config Configuration de l’API
* @param requestParams Paramètres de la requête
* @param localPluginParam Paramètres locaux du plugin
* @return
*/
public Object get(ApiConfig config, Map<String, Object> requestParams, String localPluginParam) {
return null;
}
}La méthode
initest exécutée une seule fois lors de l’initialisation du plugin ; elle sert généralement à initialiser un pool de connexions, par exemple un pool Redis.La méthode
getpermet de récupérer les données mises en cache ; le premier argument correspond à la configuration de l’API, le second aux paramètres de la requête.La méthode
setconfigure le cache après l’exécution de l’exécuteur ; le premier argument est la configuration de l’API, le second les paramètres de la requête, et le troisième le résultat de l’exécution. Si un plugin de conversion de données est configuré, ce résultat sera déjà transformé.La méthode
cleanvide le cache ; elle est appelée lorsque l’API est modifiée, déployée ou retirée.
Développement du plugin de conversion de données
- Créez une classe Java implémentant l’interface
com.gitee.freakchicken.dbapi.plugin.TransformPlugin:
import com.alibaba.fastjson.JSONObject;
import com.gitee.freakchicken.dbapi.common.ApiConfig;
import com.gitee.freakchicken.dbapi.plugin.TransformPlugin;
import java.util.List;
public class Tdemo extends TransformPlugin {
/**
* Nom du plugin, affiché sur l’interface utilisateur.
*
* @return
*/
@Override
public String getName() {
return null;
}
/**
* Description fonctionnelle du plugin, affichée sur l’interface utilisateur.
*
* @return
*/
@Override
public String getDescription() {
return null;
}
/**
* Description des paramètres du plugin, affichée sur l’interface utilisateur.
*
* @return
*/
@Override
public String getParamDescription() {
return null;
}
/**
* Méthode d’initialisation du plugin, exécutée une seule fois lors de l’instanciation.
*/
public void init() {
}
/**
* Logique de conversion des données :
*
* @param data Données résultant de l’exécution de l’exécuteur
* @param localPluginParam Paramètres locaux du plugin
* @return
*/
public Object transform(Object data, String localPluginParam) {
return null;
}
}La logique de conversion des données est écrite dans la méthode
transform.Le premier argument correspond au résultat de l’exécution de l’exécuteur ; s’il s’agit d’un exécuteur SQL, il s’agira des résultats sous forme de liste de JSON (
List<JSONObject>). Il est possible de casters cette donnée en typeList<JSONObject>.Le second argument représente les paramètres locaux du plugin.
Développement du plugin global de conversion de données
- Créez une classe Java implémentant l’interface
com.gitee.freakchicken.dbapi.plugin.GlobalTransformPlugin:
import com.alibaba.fastjson.JSONObject;
import com.gitee.freakchicken.dbapi.common.ResponseDto;
import com.gitee.freakchicken.dbapi.plugin.GlobalTransformPlugin;
public class AmisGlobalTransformPlugin extends GlobalTransformPlugin {
/**
* Nom du plugin, affiché sur l’interface utilisateur.
*
* @return
*/
@Override
public String getName() {
return null;
}
/**
* Description fonctionnelle du plugin, affichée sur l’interface utilisateur.
*
* @return
*/
@Override
public String getDescription() {
return null;
}
/**
* Description des paramètres du plugin, affichée sur l’interface utilisateur.
*
* @return
*/
@Override
public String getParamDescription() {
return null;
}
/**
* Méthode d’initialisation du plugin, exécutée une seule fois lors de l’instanciation.
*/
public void init() {
}
/**
* Logique de conversion des données :
*
* @param data Données renvoyées par l’API
* @param localPluginParam Paramètres locaux du plugin global
* @return
*/
public Object transform(ResponseDto data, String localPluginParam) {
return null;
}
}- La logique de conversion des données est écrite dans la méthode
transform, où le premier argument correspond aux résultats renvoyés par l’API, et le second aux paramètres locaux du plugin.
Développement du plugin d’alerte
- Créez une classe Java implémentant l’interface
com.gitee.freakchicken.dbapi.plugin.AlarmPlugin:
import com.gitee.freakchicken.dbapi.common.ApiConfig;
import com.gitee.freakchicken.dbapi.plugin.AlarmPlugin;
import javax.servlet.http.HttpServletRequest;
public class EmailAlarmPlugin extends AlarmPlugin {
/**
* Nom du plugin, affiché sur l’interface utilisateur.
*
* @return
*/
@Override
public String getName() {
return null;
}
/**
* Description fonctionnelle du plugin, affichée sur l’interface utilisateur.
*
* @return
*/
@Override
public String getDescription() {
return null;
}
/**
* Description des paramètres du plugin, affichée sur l’interface utilisateur.
*
* @return
*/
@Override
public String getParamDescription() {
return null;
}
/**
* Méthode d’initialisation du plugin, exécutée une seule fois lors de l’instanciation.
*/
@Override
public void init() {
}
/**
* Logique d’alerte :
*
* @param e Exception rencontrée
* @param config Métadonnées de l’API
* @param request Requête associée
* @param localPluginParam Paramètres locaux du plugin d’alerte
*/
public void alarm(Exception e, ApiConfig config, HttpServletRequest request, String localPluginParam) {
}
}- La logique d’alerte est écrite dans la méthode
alarm.
Développement du plugin de traitement des paramètres
- Créez une nouvelle classe Java qui implémente
com.gitee.freakchicken.dbapi.plugin.ParamProcessPlugin
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.gitee.freakchicken.dbapi.common.ApiConfig;
import java.util.Map;
public class PaginationPlugin extends ParamProcessPlugin {
/**
* Nom du plugin, affiché sur la page pour guider l'utilisateur
*
* @return
*/
@Override
public String getName() {
return null;
}
/**
* Description de la fonctionnalité du plugin, affichée sur la page pour guider l'utilisateur
*
* @return
*/
@Override
public String getDescription() {
return null;
}
/**
* Description des paramètres du plugin, affichée sur la page pour guider l'utilisateur
*
* @return
*/
@Override
public String getParamDescription() {
return null;
}
/**
* Méthode d'initialisation du plugin, exécutée lors de l'instanciation et ne s'exécute qu'une seule fois
*/
@Override
public void init() {
}
/**
* Traitement des paramètres
*
* @param requestParam Paramètres de la requête
* @param apiConfig Métadonnées de l'API
* @param localPluginParam Paramètres locaux du plugin
*/
@Override
public void process(Map<String, Object> requestParam, ApiConfig apiConfig, String localPluginParam) {
}
}- La logique de traitement des paramètres est écrite dans la méthode
process; requestParamcorrespond aux paramètres de la requête,apiConfigaux métadonnées de l'API, etlocalPluginParamaux paramètres locaux du plugin.
Enregistrement des plugins
- Les plugins DBAPI utilisent le mécanisme SPI de Java pour leur enregistrement ; voici les étapes à suivre :
Créez un dossier
META-INFdans le répertoireresources, puis créez un sous-dossierservicesà l'intérieur deMETA-INF.Dans le fichier
META-INF/services, créez un fichier nommécom.gitee.freakchicken.dbapi.plugin.CachePluginet indiquez-y le nom de la classe Java du plugin de cache que vous venez d'écrire.Dans le fichier
META-INF/services, créez un fichier nommécom.gitee.freakchicken.dbapi.plugin.TransformPluginet indiquez-y le nom de la classe Java du plugin de transformation de données que vous venez d'écrire.Dans le fichier
META-INF/services, créez un fichier nommécom.gitee.freakchicken.dbapi.plugin.GlobalTransformPluginet indiquez-y le nom de la classe Java du plugin de transformation globale que vous venez d'écrire.Dans le fichier
META-INF/services, créez un fichier nommécom.gitee.freakchicken.dbapi.plugin.AlarmPluginet indiquez-y le nom de la classe Java du plugin d'alerte que vous venez d'écrire.Dans le fichier
META-INF/services, créez un fichier nommécom.gitee.freakchicken.dbapi.plugin.ParamProcessPluginet indiquez-y le nom de la classe Java du plugin de traitement des paramètres que vous venez d'écrire.
Description des plugins
Paramètres globaux
- L'objectif de concevoir des paramètres globaux est de faciliter l'utilisation d'un même plugin dans différents environnements.
- Les paramètres globaux sont propres à chaque plugin et indépendants de l'API ; par exemple, un plugin de cache nécessite les informations d'adresse IP et de port du serveur Redis. Ces paramètres sont configurés dans le fichier
conf/plugin.properties. - Les paramètres globaux permettent notamment de passer facilement d'un environnement à un autre : si l'environnement de test et celui de production doivent se connecter à des adresses Redis différentes, il suffit d'indiquer ces informations dans le fichier de configuration.
- Si l'utilisateur souhaite ajouter une configuration globale pour un plugin, il peut directement y insérer les paramètres dans le fichier
conf/plugin.properties, par exemple :
RedisCachePlugin.ip=127.0.0.1
RedisCachePlugin.port=6379
RedisCachePlugin.db=0
RedisCachePlugin.password=- Méthode pour récupérer la valeur d'un paramètre global :
import com.gitee.freakchicken.dbapi.plugin.PluginConf;
String ip = PluginConf.getKey("RedisCachePlugin.ip")Paramètres locaux
L'objectif de concevoir des paramètres locaux est de permettre à un même plugin d'être réutilisé de manière flexible par plusieurs API.
Les paramètres locaux sont spécifiés individuellement pour chaque API ; leurs valeurs sont définies via l'interface utilisateur (lors de la création ou de la modification d'une API).
Par exemple, pour un plugin de cache Redis, chaque API peut avoir besoin d'une durée de cache différente ; ainsi, lorsqu'une API utilise ce même plugin, elle peut transmettre un paramètre de temps spécifique.
De même, pour un plugin de chiffrement de champs, chaque API peut nécessiter de chiffrer des champs distincts ; chaque API peut donc fournir un nom de champ différent lors de l'appel au même plugin. Cela permet à un même plugin d'être réutilisé de façon flexible par plusieurs API.
Méthode pour récupérer la valeur d'un paramètre local :
// Les paramètres locaux ont déjà été passés à la méthode correspondante du plugin ; le nom du paramètre est localPluginParam.
// Par exemple, dans la méthode alarm du plugin d'alerte, le dernier paramètre correspond aux paramètres locaux.
public void alarm(Exception e, ApiConfig config, HttpServletRequest request, String localPluginParam) {
}Journalisation dans les plugins
- Si vous souhaitez afficher des messages de journalisation au sein d'un plugin, il est recommandé d'utiliser directement la méthode
loggerhéritée de la classe parente.
super.logger.debug("set data to cache");Description des plugins
- Tous les plugins doivent implémenter trois méthodes :
getName,getDescriptionetgetParamDescription. Leur rôle est d'informer l'utilisateur, sur l'interface, de la fonctionnalité du plugin ainsi que du format des paramètres locaux.

Utilisation des plugins
- Une fois le plugin développé, procédez à son empaquetage, puis copiez le fichier JAR généré ainsi que les fichiers JAR dépendants dans le répertoire
extliboulibde DBAPI (nous recommandons vivement d'utiliser le répertoireextlibpour une gestion centralisée). Redémarrez ensuite le service DBAPI ( en mode cluster, chaque nœud doit copier le fichier JAR et redémarrer le cluster), après quoi le plugin sera opérationnel. - Si le plugin utilise des paramètres globaux, veuillez également ajouter les configurations correspondantes dans le fichier
conf/plugin.propertieset redémarrer pour que les modifications prennent effet ( en mode cluster, chaque nœud doit effectuer cette étape).