一個項目一般會有必定數量的 http 接口,這些接口按功能模塊進行分類,每一個模塊中的接口有類似點.
例如 github 部分接口以下:python
全部數據格式均爲 json.git
GET
https://api.github.com/users/用戶名
GET
https://api.github.com/repos/用戶名/倉庫名
GET
https://api.github.com/repos/用戶名/倉庫名/contents
GET
https://api.github.com/repos/用戶名/倉庫名/commits
GET
https://api.github.com/repos/用戶名/倉庫名/commits/某一條commit的SHA
GET
https://api.github.com/repos/用戶名/倉庫名/issues
某條 issue 詳情
GET
https://api.github.com/repos/用戶名/倉庫名/issues/序號
issues 都是以 1,2,3 這樣的序列排號的,能夠加?state=狀態
參數過濾狀態.github
建立/修改文件
PUT
https://api.github.com/repos/用戶名/倉庫名/contents/文件路徑
編程
{ "message": "commit message", "content": "bXkgbmV3IGZpbGUerdf9udGVudHM=" }
... ...json
若是須要屢次調用這些接口一般須要爲每一個接口封裝一個方法,這種方法工做量大,並且擴展性差.api
本文將要實現的功能以下:this
統一管理一個 api 配置文件url
格式大體以下:code
base_url = "https://api.github.com" # github api api = { "users": { "get_user_info": "{user_name}" # 獲取用戶信息 }, "repos": { "get_repo": "{user_name}/{repo_name}", # 獲取倉庫信息 "get_contents": "{user_name}/{repo_name}/contents", # 獲取倉庫內容 "set_file": "{user_name}/{repo_name}/contents/{path}", # 添加/修改文件 "delete_file": "{user_name}/{repo_name}/contents/{path}", # 刪除文件 "get_contents_in_dir": "{user_name}/{repo_name}/contents/{dir_name}", # 獲取文件夾中文件列表 "get_commits": "{user_name}/{repo_name}/commits", # 獲取提交列表 "get_commit": "{user_name}/{repo_name}/commits/{commit_RSA}", # 獲取一次提交的詳細信息 "get_issuess": "{user_name}/{repo_name}/issues?state={state:open}", # 獲取issuess列表 "get_issue": "{user_name}/{repo_name}/{issue_NO}", # 獲取一個issue詳情 } }
經過 meta_class 自動生成方法token
調用
from api.api_class import API handler = API(token='***') user_info = handler.get_user_info('kailunfan') repo_info = handler.get_repo('kailunfan', 'githubApiTest') # 須要傳入payload時用data接收 data = { "message": "new file", "content": base64.b64encode("this is the original content!".encode()).decode() } file_info = handler.set_file("kailunfan", "githubApiTest", "src/test_set_file2.txt", data=data)