URL de l’API Workfront
Pour plus d’informations sur l’URL que vous utiliserez pour appeler l’API Workfront, voir Format de domaine pour les appels API Adobe Workfront.
Concepts de base de REST
Cette section fournit une introduction de haut niveau sur la façon d’interagir avec l’API REST de Workfront pour les principes REST suivants :
URI d’objet
Chaque objet du système se voit attribuer un URI unique composé du type d’objet et de l’ID. Les exemples suivants montrent des URI décrivant trois objets uniques :
/attask/api/v15.0/project/4c78821c0000d6fa8d5e52f07a1d54d0
/attask/api/v15.0/task/4c78821c0000d6fa8d5e52f07a1d54d1
/attask/api/v15.0/issue/4c78821c0000d6fa8d5e52f07a1d54d2
Le type d’objet n’est pas sensible à la casse et peut être soit le code ObjCode abrégé (tel que proj), soit le nom alternatif de l’objet (projet).
Pour obtenir la liste des objets, des ObjCodes et des champs d’objet valides, voir Explorateur API.
Category
et un champ personnalisé est un objet Parameter
.Opérations
Les objets sont manipulés en envoyant une requête HTTP à leur URI unique. L’opération à effectuer est spécifiée par la méthode HTTP.
Les méthodes HTTP standard correspondent aux opérations suivantes :
- GET - Permet de récupérer un objet par son ID, de rechercher tous les objets par une requête, d’exécuter des rapports ou des requêtes nommées.
- POST - Insère un nouvel objet.
- PUT - Modifie un objet existant.
- DELETE - Supprime un objet.
Afin de contourner les déficiences du client ou les limites de longueur du protocole, le paramètre de méthode peut être utilisé pour modifier le comportement du protocole HTTP. Par exemple, une opération GET peut être mise en œuvre en publiant l’URI suivant :
GET /attask/api/v15.0/project?id=4c78...54d0&method=get
GET /attask/api/v15.0/project/4c78...54d0?method=get
Réponse
Chaque requête reçoit une réponse au format JSON. La réponse comporte soit un attribut data si la demande a abouti, soit un attribut error en cas de problème. Par exemple, la requête
GET /attask/api/v15.0/proj/4c7c08b20000002de5ca1ebc19edf2d5
renvoie une réponse JSON similaire à la suivante :
{
"data": [
{
"percentComplete": 0,
"status": "CUR",
"priority": 2,
"name": "Brand New Project",
"ID": "4c7c08b20000002de5ca1ebc19edf2d5"
}
]
}
Une sécurité particulière a été ajoutée pour les requêtes PUT, POST et DELETE. Toute requête d’écriture ou de suppression dans la base de données ne peut être exécutée que si sessionID=abc123 est inclus dans l’URI. Les exemples suivants montrent ce que cela donnerait pour une requête DELETE :
GET /attask/api/v15.0/project?id=4c78...54d0&method=delete&sessionID=abc123
GET /attask/api/v15.0/project/4c78...54d0?method=delete&sessionID=abc123
Authentification
L’API authentifie chaque demande pour s’assurer que le client a le droit d’afficher ou de modifier l’objet concerné par la requête.
L’authentification s’effectue en transmettant un ID de session qui peut être fourni en utilisant l’une des méthodes suivantes :
Authentification de l’en-tête de la demande
La méthode d’authentification préférée consiste à transmettre un en-tête de requête nommé SessionID contenant le jeton de session. Cela présente l’avantage d’être à l’abri des attaques Cross-site Request Forgery (CSRF) et de ne pas interférer avec l’URI à des fins de mise en cache.
Voici un exemple d’en-tête de requête :
GET /attask/api/v15.0/project/search
SessionID: abc1234
Authentification basée sur les cookies
L’API utilise la même authentification basée sur les cookies que celle utilisée par l’interface web du système. Ainsi, si un client ou une cliente se connecte à Workfront à l’aide de l’interface web, tous les appels AJAX effectués à partir du même navigateur utilisent la même authentification.
Connexion
/login
ou des clés API. Utilisez plutôt l’une des méthodes d’authentification suivantes :- Authentification du serveur avec JWT
- Authentification des utilisateurs et utilisatrices avec OAuth2
À l’aide d’un nom d’utilisateur ou d’utilisatrice et d’un mot de passe valides, vous pouvez utiliser la requête suivante pour obtenir un ID de session :
POST /attask/api/v15.0/login?username=admin&password=user
Cela permet de créer un cookie pour authentifier les futures requêtes et de renvoyer une réponse JSON contenant l’ID de session nouvellement créé, l’ID de la personne connectée et d’autres attributs de session.
Génération d’une clé API
Vous pouvez générer une clé API lorsque vous vous connectez au système en tant qu’utilisateur ou utilisatrice, comme le montre l’exemple suivant :
PUT /attask/api/v15.0/user?action=generateApiKey&username= username&password=password&method=put
Récupération d’une clé API précédemment générée
Vous pouvez également récupérer une clé API qui a été précédemment générée pour un utilisateur ou une utilisatrice en particulier en exécutant getApiKey :
PUT /attask/api/v15.0/user?action=getApiKey&username=user@email.com&password=userspassword&method=put
Vous pouvez ensuite utiliser ce résultat pour authentifier tout appel API en ajoutant « apiKey » comme paramètre de requête avec cette valeur à la place d’un sessionID ou d’un nom d’utilisateur ou d’utilisatrice et d’un mot de passe. Cela est bénéfique du point de vue de la sécurité.
La requête suivante est un exemple de récupération de données d’un projet à l’aide de la clé API :
GET /attask/api/v15.0/project/abc123xxxxx?apiKey=123abcxxxxxxxxx
Invalider une clé API
Si la valeur apiKey a été compromise, vous pouvez exécuter « clearApiKey », ce qui invalide la clé API actuelle, comme le montre l’exemple suivant :
GET /attask/api/v15.0/user?action=clearApiKey&username=user@email.com&password=userspassword&method=put
Une fois la clé effacée, vous pouvez relancer getApiKey pour générer une nouvelle clé API.
Déconnexion
Lorsqu’une session est terminée, vous pouvez utiliser la requête suivante pour déconnecter l’utilisateur ou l’utilisatrice, en empêchant tout accès ultérieur avec l’ID de session.
GET /attask/api/v15.0/logout?sessionID=abc1234
L’ID de session à déconnecter peut être spécifié sous la forme d’un cookie, d’un en-tête de requête ou d’un paramètre de requête.
Pour déconnecter un utilisateur ou une utilisatrice :
-
Accédez à votre écran de connexion, mais ne vous connectez pas.
-
Modifiez l’URL en /attask/api/v15.0/project/search.
Remarquez que la page est introuvable. -
Remplacez le mot search par login?username=admin&password=user, en remplaçant votre nom d’utilisateur ou d’utilisatrice et votre mot de passe pour admin et *user.
*Cette session est stockée dans le navigateur sous la forme d’un cookie et n’a pas besoin d’être répétée dans chaque requête GET ultérieure. -
Remplacez l’URL par /attask/api/v15.0/project/search.
-
Remarquez la réponse fournie.
Vous devez toujours inclure le sessionID fourni après la connexion lorsque vous effectuez des requêtes PUT, POST et DELETE.
Comportement GET
Utilisez la méthode HTTP GET pour récupérer un ou plusieurs objets et pour exécuter des rapports.
Récupération d’objets
Vous pouvez améliorer la recherche d’objets à l’aide de modificateurs et de filtres.
Récupération d’un objet à l’aide de l’ID de l’objet
Si vous connaissez l’identifiant d’un objet, vous pouvez le retrouver en accédant à son URI unique. Par exemple, la requête
GET /attask/api/v15.0/project/4c78821c0000d6fa8d5e52f07a1d54d0
renvoie une réponse similaire à la suivante :
{
"percentComplete": 0,
"status": "CUR",
"priority": 2,
"name": "Brand New Project",
"ID": "4c7c08b20000002de5ca1ebc19edf2d5"
}
Vous pouvez récupérer plusieurs objets dans la même requête en spécifiant le paramètre de requête ID et en donnant une liste des identifiants séparés par des virgules, comme le montre l’exemple suivant :
GET /attask/api/v15.0/project?id=4c78...54d0,4c78...54d1
Notez que la requête /attask/api/v15.0/project?id=… est identique à la requête /attask/api/v15.0/project/...
.
Récupérer un objet à l’aide de l’URI
Si vous souhaitez récupérer un objet en fonction de critères autres que l’identifiant, vous pouvez rechercher l’URI.
Par exemple, vous pouvez utiliser la requête suivante pour obtenir une liste de tous les projets dans le système :
GET /attask/api/v15.0/project/search
Vous pouvez spécifier des filtres en utilisant les paramètres de la requête sous forme de paires nom-valeur. Par exemple, l’exemple suivant montre une requête qui recherche tous les projets en cours :
GET /attask/api/v15.0/project/search?status=CUR
La requête suivante trouve toutes les tâches qui ne sont pas encore terminées et qui sont affectées à un utilisateur nommé John.
GET /attask/api/v15.0/task/search?percentComplete=100
&percentComplete_Mod=lt &assignedTo:firstName=John