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.


Accéder à l'API GraphQL


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 :

Authorization: ApiKey <clé api>

Le schéma peut être obtenu depuis l'API GraphQL, par exemple :

POST /analytics/graphql HTTP/1.1
Authorization: ApiKey <clé_api>
Content-type: application/json
Accept: application/json
Content-Length: <longueur>

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

Ce qui renvoie :

{
    "data": {
        "__schema": {
            "queryType": {
                "fields": [
                    {
                        "name": "insights"
                    },
                    {
                        "name": "projectsPosture"
                    }
                ]
            },
            "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 :

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
        }
    }
}

avec les variables :
{
    "from_day":"2022-12-01",
    "to_day":"2022-12-03",
    "scannerIdsFilter":[],
    "assetIdsFilter":[]
}

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"
          }
        ]
      }
    }
  }
}