初探Team Foundation Server (TFS) 2015 REST API

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.clemensreijnen.nl/post/2014/10/09/Visual-Studio-Online-Rest-API-introduction-and-sample-on-GitHub

http://blogs.msdn.com/b/visualstudioalm/archive/2015/05/01/extensions-for-visual-studio-online-rest-apis-for-tfs-2015-rc-and-more-from-build-2015.aspx

http://www.dotnetcurry.com/visualstudio/1162/using-rest-api-tfs-visual-studio-online

相關文章
相關標籤/搜索