github、gitlab等常用api接口


 注意: api地址區分大小寫,github偶爾訪問不了不要着急,耐心等待一會兒就好

功能 api地址 請求方式 請求參數 返回參數 例子

獲取用戶信息 

https://api.github.com/users/ get path路徑: 用戶名
一個用戶對象
https://api.github.com/users/ygunoil

 獲取用戶所有倉庫

 https://api.github.com/users/{用戶名}/repos  get  path路徑: 用戶名  
返回一個數組
https://api.github.com/users/ygunoil/repos

 獲取某個倉庫的詳細信息

 https://api.github.com/repos/{用戶名}/{倉庫名}  get   path路徑: 用戶名 和 倉庫名  
返回一個倉庫對象
 https://api.github.com/repos/ygunoil/Common-functions

獲取某個倉庫里根目錄文件或文件夾數組

https://api.github.com/repos//{用戶名}/{倉庫名}/contents  get    path路徑: 用戶名 和 倉庫名
返回一個首層文件或文件夾數組
https://api.github.com/repos/ygunoil/Common-functions/contents

獲取某個倉庫里子目錄文件或文件夾數組

https://api.github.com/repos//{用戶名}/{倉庫名}/contents/{文件名或文件夾名}  get     path路徑: 用戶名 和 倉庫名和文件名或文件夾名  返回一個文件數組

 https://api.github.com/repos/ygunoil/Common-functions/contents/utils

https://api.github.com/repos/ygunoil/Common-functions/contents/utils/Currency/CurrencyFormat.js

獲取某文件的原始內容(Raw)

1. 通過上面的文件信息中提取download_url這條鏈接,就能獲取它的原始內容了。

2. 或者直接訪問:https://raw.githubusercontent.com/{用戶名}/{倉庫名}/{分支名}/{文件路徑}

get     path路徑: 用戶名 和 倉庫名和文件l路徑 返回一個文件內容的字符串

https://raw.githubusercontent.com/ygunoil/Common-functions/master/utils/Currency/CurrencyFormat.js

 獲取某個用戶的跟隨者列表

  https://api.github.com/users/{用戶名}/followers  get   path路徑: 用戶名  
返回一個數組
https://api.github.com/users/ygunoil/followers

 獲取某個用戶正在關注誰列表

 https://api.github.com/users/{用戶名}}/following  get    path路徑: 用戶名  返回一個數組 https://api.github.com/users/ygunoil/following

 獲取某個用戶加入的組織列表

 https://api.github.com/users/{用戶名}/orgs  get   path路徑: 用戶名    返回一個數組  https://api.github.com/users/ygunoil/orgs

 repo中所有的commits列表

 https://api.github.com/repos/{用戶名}/{倉庫名}/commits  get      

 某一條commit詳情

 https://api.github.com/repos/{用戶名}/{倉庫名}/commits/

{某一條commit的SHA}

get      

 issues列表

 https://api.github.com/repos/{用戶名}/{倉庫名}/issues get      

某條issue詳情

https://api.github.com/repos/{用戶名}/{倉庫名}/issues/{序號} get issues都是以1,2,3這樣的序列排號的    

某issue中的comments列表

https://api.github.com/repos/{用戶名}/{倉庫名}/issues/{序號}/comments get      

某comment詳情

https://api.github.com/repos/{用戶名}/{倉庫名}/issues/comments/{評論詳情的ID} get 評論ID是從issues列表中獲得的    


  

查詢參數 (Parameters)

如果在上面基本鏈接中加入查詢條件,那么返回的數據就是filtered,過濾了的。比如要求只返回正在開放的issues,或者讓列表數據分頁顯示。常用如下:

分頁功能。格式是?page=頁數&per_page=每頁包含數量。
如https://api.github.com/users/solomonxie/repos?page=2&per_page=3

issues狀態。格式是?state=狀態。
如https://api.github.com/repos/solomonxie/solomonxie.github.io/issues?state=closed

  

權限認證 Authentication

首先需要知道都是,到此為止之前所有都查詢都是不需要任何權限的,給個地址就返回數據,全公開。
但是創建文件、更新、刪除等就是必須用自己的賬號"登錄"才能實現的。所以為了下面的增刪改做准備,需要先看一下權限問題。
官網雖然寫的很簡答,不過如果不熟悉API的話還是不能馬上就理解。
常用的認證方法有三種,Basic authentication, OAuth2 token, OAuth2 key/secret
三種方法效果一樣,但是各有其特點和方便之處。選哪種就要看自己哪種方便了。

認證方法一:Basic authentication
這種最簡單,如果是用curl的話,就:

curl -u "用戶名:密碼" https://api.github.com
如果是用Insomnia等api調試工具的話,直接在Auth選項欄里選Basic Auth,然后填上用戶名密碼即可。

認證方法二:OAuth2 token
關於token
這種token方式,說實話如果不是操作過API或深度了解REST的話,是很難理解的東西。
說白了就是第二個密碼,你既不用到處泄露自己的用戶名密碼,又可以專門給這個"第二密碼"設置不同需要的權限,如有的只可讀有的還可以寫等。而且這個“第二密碼”是既包括用戶名又包括密碼功能的,全站只此一個絕對不會和別人重復。初次之外,你還可以設置很多個token,也就是第三、第四、第五...密碼。很方便。
設置token方法
就位於github個人賬號設置->開發者設置->個人token里。創建一個新token時,可以選擇具體的權限,創建成功時一定要復制到本地哪里保存,只會讓你看見一次,如果忘記的話就需要重新生成(其實丟了也不算麻煩)。
image

另外!注意:

token字符串不能存儲在github的repo中,經過測試,一旦提交的文件中包含這個token字符串,那么github就會自動刪除這個token -_-! 我用了很久才明白過來,創建的Personal Access Token總是自動消失,還以為是有時限的。
用token通過權限認證
有兩種傳送方法,哪種都可以:

作為url中的參數明文傳輸:
curl https://api.github.com/?access_token=OAUTH-TOKEN
作為header中的參數傳輸:
curl -H "Authorization: token OAUTH-TOKEN" https://api.github.com
如果不是用curl而是Insomnia測試的話,和上面basic auth是大同小異的,很容易操作就不復述了。
到此為止,權限認證就算搞清了,而且也實際驗證過有效了。強烈建議用insomnia工具操作,有GUI界面方便理解,成功后再轉為curl或python等程序語言。

認證方法三:OAuth2 key/secret
這個是除了Personal Access Token之外的另一種好用的方法,即創建自己的OAuth app,然后得到一對client_id和client_secret。如下:
image
image
得到這兩個值之后,直接在訪問任何api的url連接后面顯性加上這兩個參數即可完成認證,如:
https://api.github.com/users/yourusername?client_id=YOUR-CLIENT-ID&client_secret=YOUR-CLIENT-SECRET
但是:

目前這種認證方式不支持查詢以外的操作,也就是只能GET獲取某些api信息,不能執行request里的任何PUT/PATCH/DELETE操作。

  

創建新文件 Create content

Contents操作 官方文檔
傳輸方法:PUT
訪問路徑:https://api.github.com/repos/用戶名/倉庫名/contents/文件路徑
JSON格式:
{
  "message": "commit from INSOMNIA",
  "content": "bXkgbmV3IGZpbGUgY29udGVudHM="
}
JSON填寫如下圖:
image

注意:1.必須添加權限驗證(上面有寫) 2. 數據傳送格式選擇JSON 3. 文件內容必須是把文件整體轉為Base64字符串再存到JSON變量中 4. 文件路徑中如果有不存在的文件夾,則會自動創建
起初不管怎么嘗試都一直報同樣都錯誤,400 Invalid JSON,如下圖:
[圖片上傳失敗...(image-884e71-1527903120996)]

最后發現原來是犯了很小很小都錯誤才導致如此:
image
原來,我的token看似是正常的,唯獨錯誤的是,多了一個空行!也就是說,標明都是invalid JSON,結果沒注意竟然是invalid Token!

增加文件成功后返回的消息:
image

  

更新文件 Update content

主要這幾點: 1. 傳送方式用PUT 和創建文件一樣 2. 需要權限驗證,3. 傳輸內容數據用JSON 4. 需要指定該文件的SHA碼 4. 路徑和訪問content時一樣 5. 文件內容必須是把文件整體轉為Base64字符串再存到JSON變量中
傳輸方法:PUT
訪問路徑:https://api.github.com/repos/用戶名/倉庫名/contents/文件路徑
JSON格式:
{
  "message": "update from INSOMNIA",
  "content": "Y3JlYXRlIGZpbGUgZnJvbSBJTlNPTU5JQQoKSXQncyB1cGRhdGVkISEhCgpJdCdzIHVwZGF0ZWQgYWdhaW4hIQ==",
  "sha": "57642f5283c98f6ffa75d65e2bf49d05042b4a6d"
}
注意:必須指定該文件的SHA碼,相當於文件的ID。
SHA雖然是對文件的唯一識別碼,相當於ID,但是它是會隨着文件內容變化而變化的!所以必須每次都重新獲取才行。
至於獲取方式,驗證后發現,目前最靠譜的是用前面的get content獲取到該文件的信息,然后里面找到sha。

對上傳時的JSON格式另有要求,如果沒有按照要求把必填項輸入,則會出現422錯誤信息:
image

或者如果用錯了SHA,會出現409錯誤消息:
image

如果正確傳送,就會顯示200完成更新:

  

image

刪除文件 Delete content

  • 傳輸方法:DELETE
    訪問路徑:https://api.github.com/repos/用戶名/倉庫名/contents/文件路徑
    JSON格式:
    {
      "message": "delete a file",
      "sha": "46d2b1f2ef54669a974165d0b37979e9adba1ab2"
    }
    刪除成功后,會返回200消息:
    

      

image

增刪改issues

如果做過了上面文件的增刪改,這里大同小異,不同的訪問路徑和JSON的格式而已。唯一不同的是,issues是不用把內容轉為Base64碼的。
參考鏈接:github官方文檔

增加一條issue
傳輸方法:POST
訪問路徑:https://api.github.com/repos/用戶名/倉庫名/issues
JSON格式:
{
  "title": "Creating issue from API",
  "body": "Posting a issue from Insomnia"
}
注意:issue的數據里面是可以加label,milestone和assignees的。但是必須注意milestone和assignees必須是已有的名次完全對應才行,否則無法完成創建。
更改某條issue
傳輸方法:PATCH
訪問路徑:https://api.github.com/repos/用戶名/倉庫名/issues/序號
JSON格式:
{
  "title": "Creating issue from API ---updated",
  "body": "Posting a issue from Insomnia \n\n Updated from insomnia.",
  "state": "open"
}
注意:如果JSON中加入空白的labels或assignees,如"labels": [],作用就是清空所有的標簽和相關人。
鎖住某條issue
不允許別人評論(自己可以)
image

傳輸方法:PUT
訪問路徑:https://api.github.com/repos/用戶名/倉庫名/issues/序號/lock
JSON格式:
{
  "locked": true,
  "active_lock_reason": "too heated"
}
注意:active_lock_reason只能有4種值可選:off-topic, too heated, resolved, spam,否則報錯。
另外,成功鎖住,會返回204 No Content信息。

解鎖某條issue
傳輸方法:DELETE
訪問路徑:https://api.github.com/repos/用戶名/倉庫名/issues/序號/lock
無JSON傳輸

  

增刪改comments

參考官方文檔
增加comment
傳輸方法:POST
訪問路徑:https://api.github.com/repos/用戶名/倉庫名/issues/序號/comments
JSON格式:
{
  "body": "Create a comment from API"
}
更改comment
傳輸方法:PATCH
訪問路徑:https://api.github.com/repos/用戶名/倉庫名/issues/comments/評論ID
JSON格式:
{
  "body": "Create a comment from API \n\n----Updated"
}
注意:地址中,issues后不用序號了,因為可以通過唯一的評論ID追查到。查看評論ID的方法,直接在上面查詢鏈接中找。
刪除comment
傳輸方法:DELETE
訪問路徑:https://api.github.com/repos/用戶名/倉庫名/issues/comments/評論ID
無傳輸數據

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM