Various examples¶
In this section you will find utilization example of REST routes.
POST /artifacts¶
Here an example of artifact created with some artifact typed links:
Note
“values” sent are the same for POST /artifacts and PUT artifacts/{id}
{
"tracker": {
"id": 81
},
"values": [
{
"field_id": 1796,
"value": "test"
},
{
"field_id": 1809,
"links": [
{"id": 122, "type": "_is_child"},
{"id": 123, "type": "custom"}
]
}
]
}
Retrieve artifact attachment¶
The following javascript snippet shows how we can retrieve the content of an artifact, find a suitable file field and retrieve its first attachment. Assuming that the file is an image, this can be run in the console of a recent browser like Chrome or Firefox (don’t forget to update the base url, file id, and credentials).
(() => {
const base_url = "https://tuleap.example.com/api/v1";
const artifact_id = 1;
const access_key =
"tlp-k1-22.3329b8ac4401eaf03cf7776d6bab1809883624eef7a2e2dd2dc4d07696d32504";
async function downloadImage() {
const artifact = await getArtifact(artifact_id);
const file_html_url = getFirstFileHTMLURL(artifact);
saveTheFileSomewhere(file_html_url);
}
async function getArtifact(artifact_id) {
console.log(`getArtifact (artifact_id = ${artifact_id})`);
const init = {
method: "GET",
headers: new Headers({
"Content-type": "application/json",
"X-Auth-AccessKey": access_key
}),
mode: "cors"
};
const response = await fetch(`${base_url}/artifacts/${artifact_id}`);
return response.json();
}
function getFirstFileHTMLURL(artifact) {
const field = findFirstValidFileField(artifact);
if (typeof field === "undefined") {
throw new Error(
"There are no attachments on this artifact (or you don't have permission to read them)."
);
}
return field.file_descriptions[0].html_url;
}
const findFirstValidFileField = artifact =>
artifact.values.find(isValidFileField);
const isValidFileField = field =>
field.type === "file" && fileHasAnAttachment(field);
const fileHasAnAttachment = field => field.file_descriptions.length > 0;
function saveTheFileSomewhere(file_html_url) {
// For the demo, instead of saving the file, we display it in the browser
const img = new Image();
img.src = file_html_url;
console.log("Attaching the image element at the end of the body");
document.body.appendChild(img);
console.log("done");
}
downloadImage();
})();
POST /svn¶
Repository creation and settings definition can be done in REST API.
{
"project_id": 122,
"name" : "repo01",
"settings": {
"commit_rules": {
"is_reference_mandatory": true,
"is_commit_message_change_allowed": false
}
}
PUT /svn/{id}¶
When you update an artifact you must provide all settings, for instance if you want to allow commit message change you should provide following information to the route:
{
"settings": {
"commit_rules": {
"is_reference_mandatory": true ,
"is_commit_message_change_allowed": true
},
"immutable_tags": {
"paths": [],
"whitelist": []
},
"access_file": "",
"email_notifications": []
}
}
DELETE /artifacts/{id}¶
Delete the corresponding artifact.
- Some rule are specific to this route:
only trackers administrators can delete artifacts
there is a limitation of how many artifacts you can delete by day (sliding windows of 24h)
limit is set by platform administrators and is common for all projects
if plugin archive deleted items is enabled, XML is archived
POST /projects¶
Here an example of the payload used to create a public project:
{
"shortname": "string",
"description": "string",
"label": "string",
"is_public": true,
"allow_restricted": true,
"template_id": 101,
"categories": [
{
"category_id": 1,
"value_id": 2
}
],
"fields": [
{
"field_id": 1,
"value": "My custom value"
}
]
}