注意: 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. 通過上面的文件信息中提取 2. 或者直接訪問: |
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完成更新:
刪除文件 Delete content
-
傳輸方法:DELETE 訪問路徑:https://api.github.com/repos/用戶名/倉庫名/contents/文件路徑 JSON格式: { "message": "delete a file", "sha": "46d2b1f2ef54669a974165d0b37979e9adba1ab2" } 刪除成功后,會返回200消息:
增刪改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 無傳輸數據