6.1.1. Général
Ceci est l’API REST standard pour les programmes externes qui veulent interagir avec Bugzilla. Elle fournit une interface REST pour diverses fonctions de Bugzilla.
6.1.1.1. Informations basiques
Navigation
Si l’en-tête Accept
d’une requête est défini à text/html
(comme c’est le cas
pour un navigateur Web ordinaire) alors l’API renverra les données JSON sous forme d’une
page HTML que le navigateur pourra afficher. En d’autres termes, vous pouvez jouer avec
l’API en utilisant juste votre navigateur pour voir les résultats sous une forme lisible.
C’est un bon moyen pour essayer les divers appels GET, même si vous ne pouvez pas les
utiliser pour POST ou PUT.
Format de données
L’API REST supporte seulement des données d’entrée en JSON, et les sorties en JSON ou JSONP. Par conséquent, les objets envoyés et reçus doivent être au format JSON.
Pour chaque requête, vous devez définir les en-têtes HTTP Accept
et Content-Type
pour le type MIME du format des données que vous utiliser pour communiquer avec
l’API. Content-Type
dit à l’API comment interpréter votre requête et
Accept
indique le format de données que vous souhaitez avoir en retour. Content-Type
doit être de type
application/json
. Accept
peut avoir le type précédent ou
application/javascript
pour JSONP. Dans ce dernier cas, ajoutez un paramètre callback
pour donner un nom à vos données de retour.
Les paramètres peuvent aussi être passés dans la chaîne de requête pour les requêtes autres que GET et surchargeront les paramètres correspondants dans le corps de la requête.
Exemple de requête renvoyant la version courante de Bugzilla :
GET /rest/version HTTP/1.1
Host: bugzilla.example.com
Accept: application/json
Exemple de réponse :
HTTP/1.1 200 OK
Vary: Accept
Content-Type: application/json
{
"version" : "4.2.9+"
}
Erreurs
Quand une erreur survient sur REST, un objet est renvoyé avec la clé error
définie à true
.
Le contenu de l’erreur est similaire à ceci :
{
"error": true,
"message": "Un message ici",
"code": 123
}
6.1.1.2. Types de données communes
L’API de Bugzilla utilise les différents types de paramètres suivants :
type |
description |
---|---|
int |
Entier. |
double |
Nombre à virgule flottante. |
string |
Chaîne. |
Chaîne représentant une adresse électronique. Cette valeur quand elle est renvoyée, peut être filtrée en indiquant si l’utilisateur est connecté ou pas. |
|
date |
Une date spécifique. Exemple de format : |
datetime |
Une date/heure spécifique. Le fuseau horaire doit être en UTC sauf mention contraire.
Exemple de format : |
boolean |
|
base64 |
Une chaîne encodée en base64. C’est le seul moyen de transférer des données binaires via l’API. |
array |
Un tableau. Il peut y avoir différent types dans un tableau. |
object |
Une correspondance de clés et de valeurs, appelée |
Les paramètres obligatoires sont indiqués en gras dans la table des paramètres pour chaque méthode d’API.
6.1.1.3. Authentification
Certaines méthodes ne nécessitent pas d’être connecté. Par exemple : Obtention d’un bogue. Cependant, en vous authentifiant, vous pourrez voir des informations non publiques, par exemple, un bogue qui n’est pas visible pour tous.
Il existe deux façons de vous authentifier :
Les clés d’API
Vous pouvez spécifier Bugzilla_api_key
ou simplement api_key
en argument pour tout
appel, et vous serez connecté en tant que cet utilisateur si la clé est correcte et n’a pas
été révoquée. Vous pouvez définir une clé d’API en utilisant l’onglet Clé d'API
dans
la page des Préférences.
Identifiant et mot de passe
Vous pouvez spécifier Bugzilla_login
et Bugzilla_password
ou simplement
login
et password
respectivement, comme argument de tout appel, et vous serez
connecté en tant que cet utilisateur si l’identifiant et le mot de passe sont corrects.
nom |
type |
description |
---|---|---|
Bugzilla_login |
string |
Un identifiant de connexion d’un utilisateur. |
Bugzilla_password |
string |
Le mot de passe de cet utilisateur. |
Bugzilla_restrictlogin |
boolean |
Si défini à true, alors votre identifiant ne sera valide que pour votre adresse IP. |
L’option Bugzilla_restrictlogin
n’est utilisée que si vous avez également
spécifié Bugzilla_login
et Bugzilla_password
.
Il existe aussi une méthode d’authentification obsolète décrite ci-dessous qui sera supprimée dans la version suivant Bugzilla 5.0.
Les jetons Bugzilla
Vous pouvez utiliser Connexion pour vous connecter en tant qu’utilisateur de Bugzilla. Ceci délivre
un jeton qui devra être utilisé dans les futurs appels. Utilisez la valeur pour token
et passez Bugzilla_token
ou simplement token
comme arguments d’un
appel API.
nom |
type |
description |
---|---|---|
Bugzilla_token |
string |
Vous pouvez spécifier ceci comme argument d’un appel, et vous serez connecté en tant que cet utilisateur si le jeton est correct. Ceci est le jeton renvoyé en appelant Connexion mentionné ci-dessus. |
Une erreur est renvoyée si le jeton est invalide ; vous devrez vous connecter à nouveau pour obtenir un nouveau jeton.
À compter de Bugzilla 5.0, les cookies de connexion ne seront plus renvoyés par Connexion pour des raisons de sécurité.
6.1.1.4. Paramètres utiles
Beaucoup d’appels prennent des arguments courants. Ceux-ci sont documentés ci-dessous et liés aux appels individuels où ces paramètres sont utilisés.
Inclure les champs
Beaucoup d’appels renvoient un tableau d’objets avec divers champs dans les objets. (Par exemple,
Obtention d’un bogue renvoie une liste de bogues
ayant des champs tels que
id
, summary
, creation_time
, etc.)
Ces paramètres permettent de limiter les champs présents dans les objets, pour améliorer les performances ou économiser de la bande passante.
include_fields
: Les noms (sensibles à la casse) des champs dans les données de réponse.
Seuls les champs spécifiés seront renvoyés, les autres ne seront pas
inclus. Les champs doivent être délimités par des virgules.
Les noms de champs invalides sont ignorés.
Exemple de requête pour Obtention d’un utilisateur :
GET /rest/user/1?include_fields=id,name
renverrait quelque chose comme ceci :
{
"users" : [
{
"id" : 1,
"name" : "user@domain.com"
}
]
}
Exclure les champs
exclude_fields
: Les noms (sensibles à la casse) des champs dans les données de réponse. Les champs
spécifiés ne seront pas renvoyés dans la réponse. Les champs doivent être séparés par des
virgules.
Les noms de champs invalides sont ignorés.
Les champs spécifiés ici surpassent ceux indiqués dans include_fields
. Donc si vous indiquez un champ
dans les deux, il sera exclu.
Exemple de requête pour Obtention d’un utilisateur :
GET /rest/user/1?exclude_fields=name
renverrait quelque chose comme ceci :
{
"users" : [
{
"id" : 1,
"real_name" : "John Smith"
}
]
}
Certains appels supportent la spécification de « sous-champs ». Si un appel déclare qu’il gère
les restrictions de « sous-champs », vous pouvez restreindre les informations renvoyées
dans le premier champ. Par exemple, si vous appelez Obtention de produit avec un
include_fields
de components.name
, alors, seul le nom du composant
sera renvoyé (et rien d’autre). Vous pouvez inclure le champ principal et exclure
le sous-champ.
Il existe plusieurs raccourcis d’identifiants pour demander d’inclure ou d’exclure des groupes de champs :
valeur |
description |
---|---|
_all |
Tous les champs possibles sont renvoyés si ceci est spécifié dans
|
_default |
Les champs par défaut sont renvoyés si |
_extra |
Les champs supplémentaires ne sont pas renvoyés par défaut et doivent
être manuellement spécifiés dans |
_custom |
Les champs personnalisés sont normalement renvoyés par défaut à moins
que ceci ne soit ajouté dans |
Cette documentation contient très probablement des bogues ; si vous en découvrez, veuillez les signaler ici.