<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
GitLab 作為一個開源、強大的分散式版本控制系統,已經成為網際網路公司、軟體開發公司的主流版本管理工具。使用過 GitLab 的都知道,想要提交一段程式碼,可以通過 git push 提交到遠端倉庫,也可以直接在 GitLab 平臺上修改提交。然而上述兩種提交方式都是人工提交程式碼,需要手動登入 GitLab 或者在第一次 commit 的時候提供 GitLab 帳號和密碼。
那麼,假設有這麼一個需求場景:我們開發了一個效率平臺,可以自動拉分支、自動提交程式碼到遠端倉庫。這個需求該如何實現?其實很簡單,GitLab 提供了一套完整的 API,讓第三方平臺可以通過 API 自動建立帳號、自動提交程式碼、自動拉分支,等等。API 涉及到的功能非常全面,覆蓋了分支、tag、程式碼提交、使用者、群組、專案等,基本上人工可以做的所有操作,都可以通過 API 自動實現。
GitLab API 的使用可以參考你所使用的 GitLab 服務上的幫助檔案。也可以參考 GitLab API 官網檔案。
所有 API 請求都需要身份驗證。您需要 private_token 通過 URL 或檔頭傳遞引數。如果作為檔頭傳遞,檔頭名稱必須是“PRIVATE-TOKEN”(大寫並用破折號代替下劃線)。您可以在個人資料中找到或重置您的私人令牌。
登入您的 GitLab 賬號,在左側欄中選定【Profile Settings】,再在左側欄中選定【Account】,如下圖所示:
如果未提供或提供無效,private_token 則將返回錯誤訊息,狀態碼為 401:
{ "message": "401 Unauthorized" }
API 請求應以 API 的引數和 API 的版本為字首。API 版本在 lib/api.rb 定義,例如,v4 API 的字首就是/api/v4。
有效 API 請求範例:
GET http://gitlab.example.com/api/v4/projects?private_token=<your_access_token>
使用 curl 和通過檔頭身份驗證的有效 API 請求範例:
curl --header "PRIVATE-TOKEN: <your_access_token>" "http://gitlab.example.com/api/v4/projects"
這兩個例子分別列舉了 token 作為引數,和作為 Header 的使用方法。在我們的程式中,我們只需要選擇一種自己方便的方式就可以了。
API 使用 JSON 來序列化資料。您無需在 API URL 的末尾指定.json。
http://gitlab.example.com/api/v4/projects/<project_id>/repository/branches?private_token=<your_access_token>
通過官方檔案的說明,如果要獲取一個工程的分支資料,除了 private_token 引數必填之外,還需要知道這個工程的 project_id,但從 GitLab 操作介面上並沒有工程 id 檢視的入口。
所以需要獲取到所有 projects 的資料,然後得到某個 project 的所有引數資料。
把 URL 域名引數和 Token 引數替換成自己的,用 Linux 命令在終端測試獲取下資料:
curl --header "PRIVATE-TOKEN:<your_access_token>" "http://gitlab.example.com/api/v4/projects"
執行之後獲取到的資料是預設前20條(預設一個頁面20條資料),JSON 資料結構如下,可以看到裡面的 id 欄位就是請求分支資料需要的 id 引數。
[ { "id": 1234, "description": null, "name": "Diaspora Client", "name_with_namespace": "Diaspora / Diaspora Client", "path": "diaspora-client", "path_with_namespace": "diaspora/diaspora-client", "created_at": "2022-09-30T13:46:02Z", "default_branch": "main", "tag_list": [ "example", "disapora client" ], "topics": [ "example", "disapora client" ], "ssh_url_to_repo": "git@gitlab.example.com:diaspora/diaspora-client.git", "http_url_to_repo": "https://gitlab.example.com/diaspora/diaspora-client.git", "web_url": "https://gitlab.example.com/diaspora/diaspora-client", "readme_url": "https://gitlab.example.com/diaspora/diaspora-client/blob/master/README.md", "avatar_url": "https://gitlab.example.com/uploads/project/avatar/4/uploads/avatar.png", "forks_count": 0, "star_count": 0, "last_activity_at": "2022-09-30T13:46:02Z", "namespace": { "id": 2, "name": "Diaspora", "path": "diaspora", "kind": "group", "full_path": "diaspora", "parent_id": null, "avatar_url": null, "web_url": "https://gitlab.example.com/diaspora" } }, { ... } ]
如果 GitLab 上有幾百個工程,總不能把所有的都獲取下來再去過濾吧,通過檢視 API 檔案可以用 search 引數根據 project 名稱去搜尋想要獲取的 project 資料,比如這邊要查詢 test 專案的資料。範例請求:
curl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects?search=test"
通過上面這條命令就可以獲取到專案名包含 test 的前20條資料(官網檔案描述預設20,最大100,可通過 per_page 引數設定)。
通過前面的步驟獲取到 test 專案的資料之後,知道這個project的 id 值,就可以接著通過 id 引數來獲取這個 project 的所有分支資料。範例請求:
curl --header "PRIVATE-TOKEN:<your_access_token>" "http://gitlab.xxxxxxx.com/api/v4/projects/<project_id>/repository/branches"
範例響應:
[ { "name": "main", "merged": false, "protected": true, "default": true, "developers_can_push": false, "developers_can_merge": false, "can_push": true, "web_url": "https://gitlab.example.com/my-group/my-project/-/tree/main", "commit": { "author_email": "john@example.com", "author_name": "John Smith", "authored_date": "2022-06-27T05:51:39-07:00", "committed_date": "2022-06-28T03:44:20-07:00", "committer_email": "john@example.com", "committer_name": "John Smith", "id": "7b5c3cc8be40ee161ae89a06bba6229da1032a0c", "short_id": "7b5c3cc", "title": "add projects API", "message": "add projects API", "parent_ids": [ "4ad91d3c1144c406e50c7b33bae684bd6837faf8" ] } }, ... ]
上面是獲取這個 project 的所有分支資料,如果要獲取指定分支的資料:
GET /projects/:id/repository/branches/:branch
比如獲取 master 分支的資料,範例請求:
curl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/<project_id>/repository/branches/master"
範例響應:
{ "name": "master", "merged": false, "protected": true, "default": true, "developers_can_push": false, "developers_can_merge": false, "can_push": true, "web_url": "https://gitlab.example.com/my-group/my-project/-/tree/main", "commit": { "author_email": "john@example.com", "author_name": "John Smith", "authored_date": "2022-06-27T05:51:39-07:00", "committed_date": "2022-06-28T03:44:20-07:00", "committer_email": "john@example.com", "committer_name": "John Smith", "id": "7b5c3cc8be40ee161ae89a06bba6229da1032a0c", "short_id": "7b5c3cc", "title": "add projects API", "message": "add projects API", "parent_ids": [ "4ad91d3c1144c406e50c7b33bae684bd6837faf8" ] } }
獲取專案中的倉庫提交列表:
GET /projects/:id/repository/commits
範例請求:
curl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/<project_id>/repository/commits"
範例響應:
[ { "id": "ed899a2f4b50b4370feeea94676502b42383c746", "short_id": "ed899a2f4b5", "title": "Replace sanitize with escape once", "author_name": "Example User", "author_email": "user@example.com", "authored_date": "2022-09-20T11:50:22.001+00:00", "committer_name": "Administrator", "committer_email": "admin@example.com", "committed_date": "2022-09-20T11:50:22.001+00:00", "created_at": "2022-09-20T11:50:22.001+00:00", "message": "Replace sanitize with escape once", "parent_ids": [ "6104942438c14ec7bd21c6cd5bd995272b3faff6" ], "web_url": "https://gitlab.example.com/thedude/gitlab-foss/-/commit/ed899a2f4b50b4370feeea94676502b42383c746" }, { "id": "6104942438c14ec7bd21c6cd5bd995272b3faff6", "short_id": "6104942438c", "title": "Sanitize for network graph", "author_name": "randx", "author_email": "user@example.com", "committer_name": "ExampleName", "committer_email": "user@example.com", "created_at": "2022-09-20T09:06:12.201+00:00", "message": "Sanitize for network graph", "parent_ids": [ "ae1d9fb46aa2b07ee9836d49862ec4e2c46fbbba" ], "web_url": "https://gitlab.example.com/thedude/gitlab-foss/-/commit/ed899a2f4b50b4370feeea94676502b42383c746" } ]
到此這篇關於關於GitLabAPI的詳細使用教學的文章就介紹到這了,更多相關GitLabAPI使用教學內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45