REST是一种简洁方便的Web服务,经过基于http协议的远程通讯,能够为多种客户端程序提供远程服务,大幅提升了服务器系统的可扩展性。ajax
微软宣布从Team Foundation Server 从2015版本开始提供REST API远程访问,其实早在2014年Team Foudation Service(VSO)就发布了REST API的接口程序。TFS经过TEST,为多种客户端和应用程序,多种设备提供了一种轻量级方式,使其能够快速与TFS服务器实现数据互访。开发人员能够在Windows, Andriod, iOS等设备上运行的客户端程序访问TFS,实现代码签入,项目规划和跟踪等几乎全部TFS客户端能够完成的工做。json
在REST API推出以前,开发人员只能经过.NET API或者Java API实现TFS的扩展。如今经过REST API,客户能够在任意平台和终端中实现扩展,特别是在手机移动端等设备。不一样的开发人员可使用本身熟悉的开发工具和开发语言,调用REST API,实现不一样系统与TFS的集成。api
这里我以最多见的JavaScript为例子,结合Jquery,经过最多见的工做项操做示例,来讲明如何使用TFS的REST API接口。服务器
在开始以前,你能够经过这个连接https://www.visualstudio.com/en-us/integrate/api/overview 获取TFS全部API的描述。app
1. 建立一个工做项工具
须要注意下面的示例程序中使用了Jquery读取HTML控件中配置的信息,例如TFS的地址、团队项目名称、帐户和密码等。post
function NewWit() {
var tfsurl = $("#TFSCollection").val() + $("#ProjectName").val() + "/_apis/wit/workitems/$" + $("#WorkItemType").val() + "?api-version=1.0";
//url的完整示例:https://{account}.visualstudio.com/defaultcollection/{project}/_apis/wit/workitems/${workitemtypename}?api-version={version}
$(TFSUrl).val(tfsurl);
var paraData = $("#ApiParas").val();//示例:[{"op":"add","path":"/fields/System.Title","value":"工做项标题"},{"op":"add","path":"/fields/System.AssignedTo","value":"tfsadmin"}]
$(ApiParas).val(paraData);
$.ajax({
url: tfsurl,
type: "PATCH",
contentType: "application/json-patch+json",
data: paraData,
success: function (data) {
$("#ApiResult").val(JSON.stringify(data));
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
$("#ApiResult").val("ERROR:\n" + errorThrown);
},
username: $("#TFSUserName").val(),
password: $("#TFSPassword").val()
});
}visual-studio
2. 修改工做项开发工具
function UpdateWit() {
var tfsurl = $("#TFSCollection").val() + "_apis/wit/workitems/" + $("#WitId").val() + "?api-version=1.0";
$(TFSUrl).val(tfsurl);
var paraData = $("#ApiParas").val(); //示例:[{"op":"add","path":"/fields/System.Title","value":"工做项标题"},{"op":"add","path":"/fields/System.AssignedTo","value":"tfsadmin"}]
$(ApiParas).val(paraData);
$.ajax({
url: tfsurl,
type: "PATCH",
contentType: "application/json-patch+json",
data: paraData,
success: function (data) {
$("#ApiResult").val(JSON.stringify(data));
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
$("#ApiResult").val("ERROR:\n" + errorThrown);
},
username: $("#TFSUserName").val(),
password: $("#TFSPassword").val()
});
}ui
3. 添加工做项连接
function UpdateWit() {
var tfsurl = $("#TFSCollection").val() + "_apis/wit/workitems/" + $("#WitId").val() + "?api-version=1.0";
$(TFSUrl).val(tfsurl);
var paraData = $("#ApiParas").val(); //示例:[{"op":"add","path":"/relations/-","value":{"rel":"System.LinkTypes.Dependency-forward","url":"http://tfs2015cn:8080/tfs/AbchinaCollection/_apis/wit/workitems/17"}}]
$(ApiParas).val(paraData);
$.ajax({
url: tfsurl,
type: "PATCH",
contentType: "application/json-patch+json",
data: paraData,
success: function (data) {
$("#ApiResult").val(JSON.stringify(data));
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
$("#ApiResult").val("ERROR:\n" + errorThrown);
},
beforeSend: function (xhr) {
$("#ApiResult").val("loading...");
},
username: $("#TFSUserName").val(),
password: $("#TFSPassword").val()
});
}
4. 修改迭代路径
function UpdateWit() {
var tfsurl = $("#TFSCollection").val() + "_apis/wit/workitems/" + $("#WitId").val() + "?api-version=1.0";
$(TFSUrl).val(tfsurl);
var paraData = $("#ApiParas").val(); //示例:[{"op":"add","path":"/fields/System.Title","value":"工做项标题 user 2"},{"op":"add","path":"/fields/System.IterationPath","value":"CMMI\\迭代 0"}]
$(ApiParas).val(paraData);
$.ajax({
url: tfsurl,
type: "PATCH",
contentType: "application/json-patch+json",
data: paraData,
success: function (data) {
$("#ApiResult").val(JSON.stringify(data));
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
$("#ApiResult").val("ERROR:\n" + errorThrown);
},
username: $("#TFSUserName").val(),
password: $("#TFSPassword").val()
});
}
http://www.cnblogs.com/danzhang/ ALM MVP 张洪君
补充资源:
http://www.dotnetcurry.com/visualstudio/1162/using-rest-api-tfs-visual-studio-online