Aller au contenu

Utilisation de l'API GraphQL


BoostSecurity prend en charge les API GraphQL pour accéder de manière programmatique aux différentes données de votre compte.

Notez que des données spécifiques peuvent être accessibles via des services spécialisés dans le backend BoostSecurity. Chaque service expose une API GraphQL pour interroger et muter les données spécifiques à ce service. Par exemple, des données récapitulatives sur l'ensemble du compte sur une période donnée peuvent être accessibles via le service Analytics. Finalement, ces API GraphQL spécifiques aux services seront remplacées par une seule API GraphQL qui unifiera toutes ces APIs GraphQL en une seule.

Une clé API peut être utilisée pour accéder à l'API GraphQL une fois qu'elle est créée.


Obtention d'une clé API


La première étape pour utiliser l'API GraphQL consiste à créer une clé API.


Listing des APIs GraphQL Boost


Téléchargez le fichier situé à https://app.boostsecurity.io/config.js et récupérez l'URL se terminant par graphql.


Accéder à l'API GraphQL


Une fois que vous avez créé une clé API, vous pouvez accéder à l'API GraphQL en utilisant soit un client GraphQL, soit un client HTTP. Les exemples suivants montrent comment accéder à l'API GraphQL en utilisant l'utilitaire curl.

La clé API est fournie avec l'en-tête Authorization afin d'authentifier la demande au serveur. Le mot-clé ApiKey doit être utilisé avec l'en-tête Authorization lors de la fourniture de la clé API.

Ainsi :

curl -H "Authorization: ApiKey <clé api>" -H "Content-Type: application/json" -d "{}" https://api.boostsecurity.io/<SERVICE>/graphql

Le schéma peut être obtenu depuis l'API GraphQL en utilisant l'introspection GraphQL. Enregistrez la requête suivante dans un fichier nommé introspection.json :

{
    "query":"{
        __schema {
            queryType {
                fields {
                    name
                }
            }
            mutationType {
                fields {
                    name
                }
            }
        }
    }",
    "variables":{}
}

Ensuite, interrogez l'introspection pour le service analytics comme suit :

BOOST_API_BASE="https://api.boostsecurity.io"
BOOST_SERVICE="analytics"
BOOST_GRAPHQL_API_URL="${BOOST_API_BASE}/${BOOST_SERVICE}/graphql"
curl -d "$(cat introspection.json | tr -d '\n')" \
     -H "Authorization: ApiKey <clé api>" \
     -H "Content-Type: application/json" \
     $BOOST_GRAPHQL_API_URL

Ce qui renvoie :

{
  "data": {
    "__schema": {
      "queryType": {
        "fields": [
          {
            "name": "projectsPosture"
          },
          {
            "name": "topRepositories"
          },
          {
            "name": "insights"
          },
          {
            "name": "coverage"
          },
          {
            "name": "scanMetrics"
          },
          {
            "name": "scanSummaryMetrics"
          }
        ]
      },
      "mutationType": null
    }
  }
}

Exemple utilisant l'API analytics


Par exemple, afin d'obtenir les activités quotidiennes du service analytics, entre le 2022-12-01 et le 2022-12-03, enregistrez le suivant comme daily_activities.json :

{
  "query" : "
      query(
        $from_day: Date
        $to_day: Date
        $scannerIdsFilter: [String!]
        $assetIdsFilter: [String!]
        $max_rules: Int
    ){
      insights(
        fromDay: $from_day,
        toDay: $to_day,
        maxRules: $max_rules,
        filters: {
          scannerIds:$scannerIdsFilter
          assetIds:$assetIdsFilter
        }
      ) {
        dailyMetric {
          timeStamp,
          violations,
          findings
        }
        dailyActivity {
          timeStamp,
          fixedViolations,
          mergedViolations
        }
        summary {
          findings {
            previous
            current
          }
          violations {
            previous
            current
          }
          fixes
          mergedViolations
        }
      }
    }
  ",
  "variables" : {
        "from_day":"2022-12-01",
      "to_day":"2022-12-03",
      "scannerIdsFilter":[],
      "assetIdsFilter":[]
  }
}

Ensuite, effectuez la requête pour le service analytics comme suit :

BOOST_API_BASE="https://api.boostsecurity.io"
BOOST_SERVICE="analytics"
BOOST_GRAPHQL_API_URL="${BOOST_API_BASE}/${BOOST_SERVICE}/graphql"
curl -d "$(cat daily_activities.json | tr -d '\n')" \
     -H "Authorization: ApiKey <clé api>" \
     -H "Content-Type: application/json" \
     $BOOST_GRAPHQL_API_URL

Ce qui renverrait :

{
  "data": {
    "insights": {
      "dailyMetric": [
        {
          "timeStamp": "2022-12-01T00:00:00",
          "violations": 397,
          "findings": 104
        },
        {
          "timeStamp": "2022-12-02T00:00:00",
          "violations": 397,
          "findings": 104
        },
        {
          "timeStamp": "2022-12-03T00:00:00",
          "violations": 397,
          "findings": 104
        }
      ],
      "dailyActivity": [
        {
          "timeStamp": "2022-12-01T00:00:00",
          "fixedViolations": 0,
          "mergedViolations": 0
        },
        {
          "timeStamp": "2022-12-02T00:00:00",
          "fixedViolations": 0,
          "mergedViolations": 0
        },
        {
          "timeStamp": "2022-12-03T00:00:00",
          "fixedViolations": 0,
          "mergedViolations": 0
        }
      ],
      "summary": {
        "findings": {
          "previous": 104,
          "current": 104
        },
        "violations": {
          "previous": 397,
          "current": 397
        },
        "fixes": 0,
        "mergedViolations": 0
      },
      "filters": {
        "scannerId": [
          {
            "value": "boostsecurityio/codeql",
            "displayValue": "Boost CodeQL"
          },
          ...
        ],
        "assetId": [
          {
            "value": "...<certain uuid value>...",
            "displayValue": "acme-storesrus"
          },
          {
            "value": "...<certain other uuid value>...",
            "displayValue": "acme-storesrus / account-management"
          },
          {
            "value": "...<certain other uuid value>...",
            "displayValue": "acme-storesrus / cart-service"
          },
          {
            "value": "...<certain other uuid value>...",
            "displayValue": "acme-storesrus / fidelity-service"
          },
          {
            "value": "...<certain other uuid value>...",
            "displayValue": "acme-storesrus / inventory-service"
          },
          {
            "value": "...<certain other uuid value>...",
            "displayValue": "acme-storesrus / payment-service"
          },
          {
            "value": "...<certain other uuid value>...",
            "displayValue": "acme-storesrus / services-analytics"
          }
        ]
      }
    }
  }
}