Skip to content

Ajouter une datasource (api)

Mathieu HAAGE edited this page Oct 7, 2020 · 8 revisions

Ajouter une nouvelle datasource qui sera appelée par le front de manière asynchrone, actuellement nous avons 3 datasources :

  • ApiGouv
  • ApiGouvAssociations : ApiGouv mais seulement les entrypoints pour les associations qui ne sont pas performantes
  • PG : base SIRENE + sources de données csv

Frentreprise

DataSources

Créer un nouveau dossier dans src/DataSources qui aura au minimum

  • index.js
export { default } from "./MyDatasource;
  • MyDatasource.js
export default class MyDatasource extends DataSource {
  async getSIRET(siret) {
    // récupère et renvoie les infos d'un établissement
    // doit retourner un objet (ou une promesse qui renvoie un objet) où les clés sont présentes sur le serveur dans src/frentreprise/models/Etablissement.js
  }

  async getSIREN(siren) {
    // récupère et renvoie les infos d'une entreprise
    // doit retourner un objet (ou une promesse qui renvoie un objet) où les clés sont présentes sur le serveur dans src/frentreprise/models/Entreprise.js
  }

  getSIRETCheck(data) {
    // permet de vérifier si getSIRET a vraiment fonctionné
    // pour cela on teste si une valeur est bien renseignée
    // doit retourner un boolean
    // le plus souvent on exécute return !!data.siret;
  }

  getSIRENCheck(data) {
    // permet de vérifier si getSIREN a vraiment fonctionné
    // pour cela on teste si une valeur est bien renseignée
    // doit retourner un boolean
    // le plus souvent on exécute return !!data.siren;
  }
}

Initialisation

// src/frentreprise.js
class frentreprise {
  constructor() {
    // ...
    this.addDataSource({
      name: "MyDatasource",
      priority: 80, // higher prevail
      source: new MyDatasource(),
    });

Server

Si la datasource a besoin d'information supplémentaires comme un token, un mot de passe... nous devons le faire depuis le serveur en stockant les données sensibles dans le fichier .env (penser à rajouter les clés vides dans .env.dist et mettre les bonnes informations sur le serveur)

// config/default.js

const config = {
  // ...
  MyDatasource: {
    token: process.env.MY_DATASOURCE_TOKEN,
  }
// src/index.js

const myDatasource = frentreprise.getDataSource('MyDatasource').source;
myDatasource.token = config.get("APIGouv.token");

// Si besoin d'axios
myDatasource.axiosConfig = {
  ...myDatasource.axiosConfig,
  proxy: (config.has("proxy") && config.get("proxy")) || false,
};
if (config.has("apiTimeout")) {
  myDatasource.axiosConfig.timeout = config.get("apiTimeout");
}

Client

Ajouter la datasource dans src/services/Config/Config.js

const globalConfig = {
  dataSources: [
    // ...
    { id: "MyDatasource", priority: 80 }
  ],
}