-
當前位置:首頁 > 創(chuàng)意學院 > 營銷推廣 > 專題列表 > 正文
python API(python api接口開發(fā))
大家好!今天讓創(chuàng)意嶺的小編來大家介紹下關于python API的問題,以下是小編對此問題的歸納整理,讓我們一起來看看吧。
開始之前先推薦一個非常厲害的Ai人工智能工具,一鍵生成原創(chuàng)文章、方案、文案、工作計劃、工作報告、論文、代碼、作文、做題和對話答疑等等
只需要輸入關鍵詞,就能返回你想要的內(nèi)容,有小程序、在線網(wǎng)頁版、PC客戶端和批量生成器
官網(wǎng):https://ai.de1919.com。
本文目錄:
Python中的API如何更好的理解
比如你自己實現(xiàn)了一個好用的功能,你把它寫成類,定義一些類的屬性和方法。然后給別人用的時候,別人只需要知道你這個類有哪些關鍵的屬性和方法,然后每個屬性是什么意思以及調(diào)用這個方法能做什么事。別人直接拿來就用,不需要看你是怎么實現(xiàn)這個功能的,而你給他的每個方法的文檔說明就是API文檔了,這就是面向對象的思想吧。當然這只是類的API接口,還有通信類的網(wǎng)絡接口等到。python怎么調(diào)用api接口
調(diào)用windows API的方式其實有兩種,第一種是通過第三方模塊pywin32。如果小伙伴安裝了pip,可以通過pip安裝pywin32
在命令行中運行pip pst查看是否安裝了pywin32
如圖
我們這里調(diào)用一個windows最基本的API,MessageBox,該接口可以顯示一個對話框。
這里小編就不過多介紹了,只簡單的描述MessageBox接口,MessageBox是windows的一個API接口,作用是顯示一個對話框。
原型為:
int WINAPI MessageBox(HWND hWnd,LPCTSTR lpText,LPCTSTR lpCaption,UINT uType);
第一個參數(shù)hWnd,指明了該對話框屬于哪個窗口,lpText為窗口提示信息,lpCaption則為窗口標題,uType則是定義對話框的按鈕和圖標。
這里我們需要導入win32api這個模塊(隸屬于pywin32),如果需要宏定義的,API的宏被定義在win32con(同隸屬于pywin32)模塊內(nèi)。
這里我們只導入一個win32api模塊,然后簡單的調(diào)用MessageBox顯示一個對話框即可。
如果我們不會安裝pywin32模塊,或者說不想安裝這個三方模塊。這時我們還有一個辦法。
調(diào)用python內(nèi)置模塊ctypes,如果小伙伴有windows編程基礎的話,或者看過一點MSDN的話,都該知道,Windows的API其實是以dll文件(動態(tài)鏈接庫)方式存在的。
+和|效果是相同的
更多Python相關技術文章,請訪問Python教程欄目進行學習!以上就是小編分享的關于python怎么調(diào)用api接口的詳細內(nèi)容希望對大家有所幫助,更多有關python教程請關注環(huán)球青藤其它相關文章!
如何使用python開發(fā)一個api?
去年春節(jié)期間,沒事報了一個pythonweb開發(fā)的網(wǎng)絡課程,根據(jù)自己的學習情況來回答一下。一個頁面的開發(fā),應該是分前端和后端的。關于后端在python中有兩個最常見的開發(fā)框架:Django,flask。Django大而全,什么功能模塊都已經(jīng)封裝好了,調(diào)用即可;flask小而精,沒有很高的封裝,但是有許多功能模塊,需要我們自己去集成。
當初學習的那個網(wǎng)絡課程是用flask框架來做的,上手很簡單:當初學習的時候能寫一個小的網(wǎng)站,本來想轉行做python后端開發(fā)的,但是后來還是接著做數(shù)據(jù)挖掘了,許久不用,倒是有點生疏了??偟脕碚f,有幾大模塊:路由route()裝飾器把一個函數(shù)綁定到對應的URL上,F(xiàn)lask的URL規(guī)則基于Werkzeug的路由模塊。
這個模塊背后的思想是基于Apache以及更早的HTTP服務器主張的先例,保證優(yōu)雅且唯一的URL。模板渲染Jinja2用Python生成HTML十分無趣,而且相當繁瑣,因為你必須手動對HTML做轉義來保證應用的安全。為此,F(xiàn)lask配備了Jinja2模板引擎。
當然你也可以使用其他的模板引擎,但是建議你還是使用jinja2模板請求對象request你可以使用全局request對象訪問進入的請求數(shù)據(jù)。Flask處理進入的請求數(shù)據(jù)并允許你用這個全局對象訪問它。如果你工作在多線程環(huán)境,F(xiàn)lask內(nèi)部保證你總會在當前線程上獲取正確的數(shù)據(jù)。
數(shù)據(jù)庫交互-Flask-SQLAlchemy通過sqlalchemy對數(shù)據(jù)庫增刪改查,使用的是orm模式,不需要寫SQL語句。在數(shù)據(jù)庫中,一個表就是一個python類,一個類的實例就是表中的行。在開發(fā)過程中,會用到一些python的高級應用:裝飾器:在權限驗證的時候很需要用到模塊的導入:防止循環(huán)導入圖像處理:驗證碼生成property使用:密碼加密時使用關于前端如果對前端不熟,想做一個小網(wǎng)站練練手,推薦你使用Bootstrap里面有各種的CSS樣式,各種組件,JS插件,還有一些網(wǎng)站實例供你參考,對前端HTML,CSS不是很熟悉的,可以通過這略微修改快速搭建一個前端頁面。
后記:將來的數(shù)據(jù)挖掘工作者可能也需要懂網(wǎng)站后端開發(fā),因為以后建模不會一直都是在單機中,可能會集成到網(wǎng)站中,實時數(shù)據(jù)流入模型,結果展示在網(wǎng)站上。
如何使用python 開發(fā)一個api
使用 Python 和 Flask 設計 RESTful API
近些年來 REST (REpresentational State Transfer) 已經(jīng)變成了 web services 和 web APIs 的標配。
在本文中我將向你展示如何簡單地使用 Python 和 Flask 框架來創(chuàng)建一個 RESTful 的 web service。
什么是 REST?
六條設計規(guī)范定義了一個 REST 系統(tǒng)的特點:
客戶端-服務器: 客戶端和服務器之間隔離,服務器提供服務,客戶端進行消費。
無狀態(tài): 從客戶端到服務器的每個請求都必須包含理解請求所必需的信息。換句話說, 服務器不會存儲客戶端上一次請求的信息用來給下一次使用。
可緩存: 服務器必須明示客戶端請求能否緩存。
分層系統(tǒng): 客戶端和服務器之間的通信應該以一種標準的方式,就是中間層代替服務器做出響應的時候,客戶端不需要做任何變動。
統(tǒng)一的接口: 服務器和客戶端的通信方法必須是統(tǒng)一的。
按需編碼: 服務器可以提供可執(zhí)行代碼或腳本,為客戶端在它們的環(huán)境中執(zhí)行。這個約束是唯一一個是可選的。
什么是一個 RESTful 的 web service?
REST 架構的最初目的是適應萬維網(wǎng)的 HTTP 協(xié)議。
RESTful web services 概念的核心就是“資源”。 資源可以用 URI 來表示。客戶端使用 HTTP 協(xié)議定義的方法來發(fā)送請求到這些 URIs,當然可能會導致這些被訪問的”資源“狀態(tài)的改變。
HTTP 標準的方法有如下:
========== ===================== ==================================HTTP 方法 行為 示例
========== ===================== ==================================
GET 獲取資源的信息 http://example.com/api/orders
GET 獲取某個特定資源的信息 http://example.com/api/orders/123
POST 創(chuàng)建新資源 http://example.com/api/orders
PUT 更新資源 http://example.com/api/orders/123
DELETE 刪除資源 http://example.com/api/orders/123
========== ====================== ==================================
REST 設計不需要特定的數(shù)據(jù)格式。在請求中數(shù)據(jù)可以以 JSON 形式, 或者有時候作為 url 中查詢參數(shù)項。
設計一個簡單的 web service
堅持 REST 的準則設計一個 web service 或者 API 的任務就變成一個標識資源被展示出來以及它們是怎樣受不同的請求方法影響的練習。
比如說,我們要編寫一個待辦事項應用程序而且我們想要為它設計一個 web service。要做的第一件事情就是決定用什么樣的根 URL 來訪問該服務。例如,我們可以通過這個來訪問:
http://[hostname]/todo/api/v1.0/
在這里我已經(jīng)決定在 URL 中包含應用的名稱以及 API 的版本號。在 URL 中包含應用名稱有助于提供一個命名空間以便區(qū)分同一系統(tǒng)上的其它服務。在 URL 中包含版本號能夠幫助以后的更新,如果新版本中存在新的和潛在不兼容的功能,可以不影響依賴于較舊的功能的應用程序。
下一步驟就是選擇將由該服務暴露(展示)的資源。這是一個十分簡單地應用,我們只有任務,因此在我們待辦事項中唯一的資源就是任務。
我們的任務資源將要使用 HTTP 方法如下:
========== =============================================== =============================HTTP 方法 URL 動作
========== =============================================== ==============================
GET http://[hostname]/todo/api/v1.0/tasks 檢索任務列表
GET http://[hostname]/todo/api/v1.0/tasks/[task_id] 檢索某個任務
POST http://[hostname]/todo/api/v1.0/tasks 創(chuàng)建新任務
PUT http://[hostname]/todo/api/v1.0/tasks/[task_id] 更新任務
DELETE http://[hostname]/todo/api/v1.0/tasks/[task_id] 刪除任務
========== ================================================ =============================
我們定義的任務有如下一些屬性:
id: 任務的唯一標識符。數(shù)字類型。
title: 簡短的任務描述。字符串類型。
description: 具體的任務描述。文本類型。
done: 任務完成的狀態(tài)。布爾值。
目前為止關于我們的 web service 的設計基本完成。剩下的事情就是實現(xiàn)它!
Flask 框架的簡介
如果你讀過 Flask Mega-Tutorial 系列,就會知道 Flask 是一個簡單卻十分強大的 Python web 框架。
在我們深入研究 web services 的細節(jié)之前,讓我們回顧一下一個普通的 Flask Web 應用程序的結構。
我會首先假設你知道 Python 在你的平臺上工作的基本知識。 我將講解的例子是工作在一個類 Unix 操作系統(tǒng)。簡而言之,這意味著它們能工作在 Linux,Mac OS X 和 Windows(如果你使用Cygwin)。 如果你使用 Windows 上原生的 Python 版本的話,命令會有所不同。
讓我們開始在一個虛擬環(huán)境上安裝 Flask。如果你的系統(tǒng)上沒有 virtualenv,你可以從https://pypi.python.org/pypi/virtualenv 上下載:
$ mkdir todo-api$ cd todo-api
$ virtualenv flask
New python executable in flask/bin/python
Installing setuptools............................done.
Installing pip...................done.
$ flask/bin/pip install flask
既然已經(jīng)安裝了 Flask,現(xiàn)在開始創(chuàng)建一個簡單地網(wǎng)頁應用,我們把它放在一個叫 app.py 的文件中:
#!flask/bin/pythonfrom flask import Flaskapp = Flask(__name__)@app.route('/')def index():return "Hello, World!"if __name__ == '__main__':
app.run(debug=True)
為了運行這個程序我們必須執(zhí)行 app.py:
$ chmod a+x app.py$ ./app.py
* Running on http://127.0.0.1:5000/
* Restarting with reloader
現(xiàn)在你可以啟動你的網(wǎng)頁瀏覽器,輸入 http://localhost:5000 看看這個小應用程序的效果。
簡單吧?現(xiàn)在我們將這個應用程序轉換成我們的 RESTful service!
使用 Python 和 Flask 實現(xiàn) RESTful services
使用 Flask 構建 web services 是十分簡單地,比我在 Mega-Tutorial 中構建的完整的服務端的應用程序要簡單地多。
在 Flask 中有許多擴展來幫助我們構建 RESTful services,但是在我看來這個任務十分簡單,沒有必要使用 Flask 擴展。
我們 web service 的客戶端需要添加、刪除以及修改任務的服務,因此顯然我們需要一種方式來存儲任務。最直接的方式就是建立一個小型的數(shù)據(jù)庫,但是數(shù)據(jù)庫并不是本文的主體。學習在 Flask 中使用合適的數(shù)據(jù)庫,我強烈建議閱讀 Mega-Tutorial。
這里我們直接把任務列表存儲在內(nèi)存中,因此這些任務列表只會在 web 服務器運行中工作,在結束的時候就失效。 這種方式只是適用我們自己開發(fā)的 web 服務器,不適用于生產(chǎn)環(huán)境的 web 服務器, 這種情況一個合適的數(shù)據(jù)庫的搭建是必須的。
我們現(xiàn)在來實現(xiàn) web service 的第一個入口:
#!flask/bin/pythonfrom flask import Flask, jsonifyapp = Flask(__name__)tasks = [{
'id': 1,
'title': u'Buy groceries',
'description': u'Milk, Cheese, Pizza, Fruit, Tylenol',
'done': False
},
{
'id': 2,
'title': u'Learn Python',
'description': u'Need to find a good Python tutorial on the web',
'done': False
}]@app.route('/todo/api/v1.0/tasks', methods=['GET'])def get_tasks():
return jsonify({'tasks': tasks})if __name__ == '__main__':
app.run(debug=True)
正如你所見,沒有多大的變化。我們創(chuàng)建一個任務的內(nèi)存數(shù)據(jù)庫,這里無非就是一個字典和數(shù)組。數(shù)組中的每一個元素都具有上述定義的任務的屬性。
取代了首頁,我們現(xiàn)在擁有一個 get_tasks 的函數(shù),訪問的 URI 為 /todo/api/v1.0/tasks,并且只允許 GET 的 HTTP 方法。
這個函數(shù)的響應不是文本,我們使用 JSON 數(shù)據(jù)格式來響應,F(xiàn)lask 的 jsonify 函數(shù)從我們的數(shù)據(jù)結構中生成。
使用網(wǎng)頁瀏覽器來測試我們的 web service 不是一個最好的注意,因為網(wǎng)頁瀏覽器上不能輕易地模擬所有的 HTTP 請求的方法。相反,我們會使用 curl。如果你還沒有安裝 curl 的話,請立即安裝它。
通過執(zhí)行 app.py,啟動 web service。接著打開一個新的控制臺窗口,運行以下命令:
$ curl -i http://localhost:5000/todo/api/v1.0/tasksHTTP/1.0 200 OK
Content-Type: application/json
Content-Length: 294
Server: Werkzeug/0.8.3 Python/2.7.3
Date: Mon, 20 May 2013 04:53:53 GMT
{
"tasks": [
{
"description": "Milk, Cheese, Pizza, Fruit, Tylenol",
"done": false,
"id": 1,
"title": "Buy groceries"
},
{
"description": "Need to find a good Python tutorial on the web",
"done": false,
"id": 2,
"title": "Learn Python"
}
]
}
我們已經(jīng)成功地調(diào)用我們的 RESTful service 的一個函數(shù)!
現(xiàn)在我們開始編寫 GET 方法請求我們的任務資源的第二個版本。這是一個用來返回單獨一個任務的函數(shù):
from flask import abort@app.route('/todo/api/v1.0/tasks/<int:task_id>', methods=['GET'])def get_task(task_id):task = filter(lambda t: t['id'] == task_id, tasks)
if len(task) == 0:
abort(404)
return jsonify({'task': task[0]})
第二個函數(shù)有些意思。這里我們得到了 URL 中任務的 id,接著 Flask 把它轉換成 函數(shù)中的 task_id 的參數(shù)。
我們用這個參數(shù)來搜索我們的任務數(shù)組。如果我們的數(shù)據(jù)庫中不存在搜索的 id,我們將會返回一個類似 404 的錯誤,根據(jù) HTTP 規(guī)范的意思是 “資源未找到”。
如果我們找到相應的任務,那么我們只需將它用 jsonify 打包成 JSON 格式并將其發(fā)送作為響應,就像我們以前那樣處理整個任務集合。
調(diào)用 curl 請求的結果如下:
$ curl -i http://localhost:5000/todo/api/v1.0/tasks/2HTTP/1.0 200 OK
Content-Type: application/json
Content-Length: 151
Server: Werkzeug/0.8.3 Python/2.7.3
Date: Mon, 20 May 2013 05:21:50 GMT
{
"task": {
"description": "Need to find a good Python tutorial on the web",
"done": false,
"id": 2,
"title": "Learn Python"
}
}
$ curl -i http://localhost:5000/todo/api/v1.0/tasks/3
HTTP/1.0 404 NOT FOUND
Content-Type: text/html
Content-Length: 238
Server: Werkzeug/0.8.3 Python/2.7.3
Date: Mon, 20 May 2013 05:21:52 GMT
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<title>404 Not Found</title>
<h1>Not Found</h1>
<p>The requested URL was not found on the server.</p><p>If you entered the URL manually please check your spelling and try again.</p>
當我們請求 id #2 的資源時候,我們獲取到了,但是當我們請求 #3 的時候返回了 404 錯誤。有關錯誤奇怪的是返回的是 HTML 信息而不是 JSON,這是因為 Flask 按照默認方式生成 404 響應。由于這是一個 Web service 客戶端希望我們總是以 JSON 格式回應,所以我們需要改善我們的 404 錯誤處理程序:
from flask import make_response@app.errorhandler(404)def not_found(error):return make_response(jsonify({'error': 'Not found'}), 404)
我們會得到一個友好的錯誤提示:
$ curl -i http://localhost:5000/todo/api/v1.0/tasks/3HTTP/1.0 404 NOT FOUND
Content-Type: application/json
Content-Length: 26
Server: Werkzeug/0.8.3 Python/2.7.3
Date: Mon, 20 May 2013 05:36:54 GMT
{
"error": "Not found"
}
接下來就是 POST 方法,我們用來在我們的任務數(shù)據(jù)庫中插入一個新的任務:
from flask import request@app.route('/todo/api/v1.0/tasks', methods=['POST'])def create_task():if not request.json or not 'title' in request.json:
abort(400)
task = {
'id': tasks[-1]['id'] + 1,
'title': request.json['title'],
'description': request.json.get('description', ""),
'done': False
}
tasks.append(task)
return jsonify({'task': task}), 201
添加一個新的任務也是相當容易地。只有當請求以 JSON 格式形式,request.json 才會有請求的數(shù)據(jù)。如果沒有數(shù)據(jù),或者存在數(shù)據(jù)但是缺少 title 項,我們將會返回 400,這是表示請求無效。
接著我們會創(chuàng)建一個新的任務字典,使用最后一個任務的 id + 1 作為該任務的 id。我們允許 description 字段缺失,并且假設 done 字段設置成 False。
我們把新的任務添加到我們的任務數(shù)組中,并且把新添加的任務和狀態(tài) 201 響應給客戶端。
使用如下的 curl 命令來測試這個新的函數(shù):
$ curl -i -H "Content-Type: application/json" -X POST -d '{"title":"Read a book"}' http://localhost:5000/todo/api/v1.0/tasksHTTP/1.0 201 Created
Content-Type: application/json
Content-Length: 104
Server: Werkzeug/0.8.3 Python/2.7.3
Date: Mon, 20 May 2013 05:56:21 GMT
{
"task": {
"description": "",
"done": false,
"id": 3,
"title": "Read a book"
}
}
注意:如果你在 Windows 上并且運行 Cygwin 版本的 curl,上面的命令不會有任何問題。然而,如果你使用原生的 curl,命令會有些不同:
curl -i -H "Content-Type: application/json" -X POST -d "{"""title""":"""Read a book"""}" http://localhost:5000/todo/api/v1.0/tasks當然在完成這個請求后,我們可以得到任務的更新列表:
$ curl -i http://localhost:5000/todo/api/v1.0/tasksHTTP/1.0 200 OK
Content-Type: application/json
Content-Length: 423
Server: Werkzeug/0.8.3 Python/2.7.3
Date: Mon, 20 May 2013 05:57:44 GMT
{
"tasks": [
{
"description": "Milk, Cheese, Pizza, Fruit, Tylenol",
"done": false,
"id": 1,
"title": "Buy groceries"
},
{
"description": "Need to find a good Python tutorial on the web",
"done": false,
"id": 2,
"title": "Learn Python"
},
{
"description": "",
"done": false,
"id": 3,
"title": "Read a book"
}
]
}
剩下的兩個函數(shù)如下所示:
@app.route('/todo/api/v1.0/tasks/<int:task_id>', methods=['PUT'])def update_task(task_id):task = filter(lambda t: t['id'] == task_id, tasks)
if len(task) == 0:
abort(404)
if not request.json:
abort(400)
if 'title' in request.json and type(request.json['title']) != unicode:
abort(400)
if 'description' in request.json and type(request.json['description']) is not unicode:
abort(400)
以上就是關于python API相關問題的回答。希望能幫到你,如有更多相關問題,您也可以聯(lián)系我們的客服進行咨詢,客服也會為您講解更多精彩的知識和內(nèi)容。
推薦閱讀:
免費學python的網(wǎng)站(python入門教程(非常詳細))
api接口怎么調(diào)用(api接口怎么調(diào)用python)
近大遠小的變化能使畫面產(chǎn)生空間感(近大遠小可以表現(xiàn)畫面空間嗎-)
AI數(shù)據(jù)處理(ai數(shù)據(jù)處理是什么工作)