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