python調用restful
⑴ python3如何實現 遠程調用
XMLRPCLIB或者是rpyc兩個庫都簡單好用。還有些老版本的遠程 過程 調用,都有很多限制。其實restful方式,通過WEB遠程調用也不是不可以呵。
rpyc效率不高,不過簡單,強大。 可以在pypi這個網站下載,其它的包也可以在這里下載。
另外如果自己想追求效率,可以直接使用socketserver,幫助里有一個例子,復制過來改一改就能用。
此外 twist方式實現的通訊也很強大。
rpyc是源碼。你直接python setup.py install就可以安裝上。 不需要編譯好的版本。也不存在不兼容的問題。
此外thrift, avro都是hadoop大數據環境里常用的協議,還有protocol_buf,都可以研究一下。
⑵ python寫好的功能 怎麼發布成restful介面
使用Node.js和npm安裝CoffeeScript盡管有很多不藉助Node來運行CoffeeScript代碼的方法(附錄2會談到其中幾種),然而我還是假定你在全書中用的是標準的coffee命令,專門運行在Node上的。但是只有在第6章才會明確需要使用Node和npm。請注意,使用Windows系統的用戶,在繼續之前你需要先安裝Cygwin 。Cygwin基本上相當於一個Linux模擬器。雖然Node.js在0.6版本的藍圖中計劃直接支持Windows,但是在寫作本書之時,使用Cygwin是現有的最可靠的方法。Mac用戶需要安裝Xcode ,重點並不在於這個程序,而在於那些隨它一起安裝的命令行開發工具。嘗試運行命令gcc(GNU編譯器集合)來檢測系統中是否已經安裝了這些工具:
⑶ python處理的代碼 怎麼發布成restful介面
Web API文檔工具列表 Swagger ——Swagger框架可以通過代碼生成漂亮的在線API,甚至可以提供運行示例。支持Scala、java、Javascript、Ruby、php甚至 Actionscript 3。在線 Demo 。 I/O Docs ——I/O Docs是一個用於RESTful Web APIs的互動式文檔系統...
⑷ python 怎麼 調用 自定義的 java 類
這個有幾種方式,你看看哪種更適合你。
把java封裝成restful介面,然後python通過遠程調用數據。
使用Pyjnius這個python庫。
#源代碼:github.com/kivy/pyjnius
#文檔:pyjnius.readthedocs.org
#也有其他一些的庫,如 JPype 或 Py4j ,它們在設計和可用性方面都不是很好。而使用 Jython也不為另一種選擇,因為我們想使用 python開發Android項目。
#現在就讓我來告訴你,如何簡單的使用Pyjnius:
>>> from jnius import autoclass
>>> Stack = autoclass('java.util.Stack')
>>> stack = Stack()
>>> stack.push('hello')
>>> stack.push('world')
>>> stack.pop()
'world'
>>> stack.pop()
'hello'
如果解決了您的問題請採納!
⑸ 如何使用python 開發一個api
使用 Python 和 Flask 設計 RESTful API
近些年來 REST (REpresentational State Transfer) 已經變成了 web services 和 web APIs 的標配。
在本文中我將向你展示如何簡單地使用 Python 和 Flask 框架來創建一個 RESTful 的 web service。
什麼是 REST?
六條設計規范定義了一個 REST 系統的特點:
客戶端-伺服器: 客戶端和伺服器之間隔離,伺服器提供服務,客戶端進行消費。
無狀態: 從客戶端到伺服器的每個請求都必須包含理解請求所必需的信息。換句話說, 伺服器不會存儲客戶端上一次請求的信息用來給下一次使用。
可緩存: 伺服器必須明示客戶端請求能否緩存。
分層系統: 客戶端和伺服器之間的通信應該以一種標準的方式,就是中間層代替伺服器做出響應的時候,客戶端不需要做任何變動。
統一的介面: 伺服器和客戶端的通信方法必須是統一的。
按需編碼: 伺服器可以提供可執行代碼或腳本,為客戶端在它們的環境中執行。這個約束是唯一一個是可選的。
- ========== ===================== ==================================
- HTTP 方法 行為 示例
- ========== ===================== ==================================
- GET 獲取資源的信息 http://example.com/api/orders
- GET 獲取某個特定資源的信息 http://example.com/api/orders/123
- POST 創建新資源 http://example.com/api/orders
- PUT 更新資源 http://example.com/api/orders/123
- DELETE 刪除資源 http://example.com/api/orders/123
- ========== ====================== ==================================
- ========== =============================================== =============================
- 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 創建新任務
- PUT http://[hostname]/todo/api/v1.0/tasks/[task_id] 更新任務
- DELETE http://[hostname]/todo/api/v1.0/tasks/[task_id] 刪除任務
- ========== ================================================ =============================
id: 任務的唯一標識符。數字類型。
title: 簡短的任務描述。字元串類型。
description: 具體的任務描述。文本類型。
done: 任務完成的狀態。布爾值。
- $ 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
- #!flask/bin/pythonfrom flask import Flaskapp = Flask(__name__)@app.route('/')def index():
- return "Hello, World!"if __name__ == '__main__':
- app.run(debug=True)
- $ chmod a+x app.py
- $ ./app.py
- * Running on http://127.0.0.1:5000/
- * Restarting with reloader
- #!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)
- $ curl -i http://localhost:5000/todo/api/v1.0/tasks
- HTTP/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"
- }
- ]
- }
- from flask import [email protected]('/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]})
- $ curl -i http://localhost:5000/todo/api/v1.0/tasks/2
- HTTP/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>
- from flask import [email protected](404)def not_found(error):
- return make_response(jsonify({'error': 'Not found'}), 404)
- $ curl -i http://localhost:5000/todo/api/v1.0/tasks/3
- HTTP/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"
- }
- from flask import [email protected]('/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
- $ curl -i -H "Content-Type: application/json" -X POST -d '{"title":"Read a book"}' http://localhost:5000/todo/api/v1.0/tasks
- HTTP/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"
- }
- }
- 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/tasks
- HTTP/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"
- }
- ]
- }
- @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)
什麼是一個 RESTful 的 web service?
REST 架構的最初目的是適應萬維網的 HTTP 協議。
RESTful web services 概念的核心就是「資源」。 資源可以用URI來表示。客戶端使用 HTTP 協議定義的方法來發送請求到這些 URIs,當然可能會導致這些被訪問的」資源「狀態的改變。
HTTP 標準的方法有如下:
REST 設計不需要特定的數據格式。在請求中數據可以以JSON形式, 或者有時候作為 url 中查詢參數項。
設計一個簡單的 web service
堅持 REST 的准則設計一個 web service 或者 API 的任務就變成一個標識資源被展示出來以及它們是怎樣受不同的請求方法影響的練習。
比如說,我們要編寫一個待辦事項應用程序而且我們想要為它設計一個 web service。要做的第一件事情就是決定用什麼樣的根 URL 來訪問該服務。例如,我們可以通過這個來訪問:
http://[hostname]/todo/api/v1.0/
在這里我已經決定在 URL 中包含應用的名稱以及 API 的版本號。在 URL 中包含應用名稱有助於提供一個命名空間以便區分同一系統上的其它服務。在 URL 中包含版本號能夠幫助以後的更新,如果新版本中存在新的和潛在不兼容的功能,可以不影響依賴於較舊的功能的應用程序。
下一步驟就是選擇將由該服務暴露(展示)的資源。這是一個十分簡單地應用,我們只有任務,因此在我們待辦事項中唯一的資源就是任務。
我們的任務資源將要使用 HTTP 方法如下:
我們定義的任務有如下一些屬性:
目前為止關於我們的 web service 的設計基本完成。剩下的事情就是實現它!
Flask 框架的簡介
如果你讀過Flask Mega-Tutorial 系列,就會知道 Flask 是一個簡單卻十分強大的 Python web 框架。
在我們深入研究 web services 的細節之前,讓我們回顧一下一個普通的 Flask Web 應用程序的結構。
我會首先假設你知道 Python 在你的平台上工作的基本知識。 我將講解的例子是工作在一個類 Unix 操作系統。簡而言之,這意味著它們能工作在 Linux,Mac OS X 和 Windows(如果你使用Cygwin)。 如果你使用 Windows 上原生的 Python 版本的話,命令會有所不同。
讓我們開始在一個虛擬環境上安裝 Flask。如果你的系統上沒有 virtualenv,你可以從https://pypi.python.org/pypi/virtualenv上下載:
既然已經安裝了 Flask,現在開始創建一個簡單地網頁應用,我們把它放在一個叫 app.py 的文件中:
為了運行這個程序我們必須執行 app.py:
現在你可以啟動你的網頁瀏覽器,輸入http://localhost:5000看看這個小應用程序的效果。
簡單吧?現在我們將這個應用程序轉換成我們的 RESTful service!
使用 Python 和 Flask 實現 RESTful services
使用 Flask 構建 web services 是十分簡單地,比我在Mega-Tutorial中構建的完整的服務端的應用程序要簡單地多。
在 Flask 中有許多擴展來幫助我們構建 RESTful services,但是在我看來這個任務十分簡單,沒有必要使用 Flask 擴展。
我們 web service 的客戶端需要添加、刪除以及修改任務的服務,因此顯然我們需要一種方式來存儲任務。最直接的方式就是建立一個小型的資料庫,但是資料庫並不是本文的主體。學習在 Flask 中使用合適的資料庫,我強烈建議閱讀Mega-Tutorial。
這里我們直接把任務列表存儲在內存中,因此這些任務列表只會在 web 伺服器運行中工作,在結束的時候就失效。 這種方式只是適用我們自己開發的 web 伺服器,不適用於生產環境的 web 伺服器, 這種情況一個合適的資料庫的搭建是必須的。
我們現在來實現 web service 的第一個入口:
正如你所見,沒有多大的變化。我們創建一個任務的內存資料庫,這里無非就是一個字典和數組。數組中的每一個元素都具有上述定義的任務的屬性。
取代了首頁,我們現在擁有一個 get_tasks 的函數,訪問的 URI 為 /todo/api/v1.0/tasks,並且只允許 GET 的 HTTP 方法。
這個函數的響應不是文本,我們使用 JSON 數據格式來響應,Flask 的 jsonify 函數從我們的數據結構中生成。
使用網頁瀏覽器來測試我們的 web service 不是一個最好的注意,因為網頁瀏覽器上不能輕易地模擬所有的 HTTP 請求的方法。相反,我們會使用 curl。如果你還沒有安裝 curl 的話,請立即安裝它。
通過執行 app.py,啟動 web service。接著打開一個新的控制台窗口,運行以下命令:
我們已經成功地調用我們的 RESTful service 的一個函數!
現在我們開始編寫 GET 方法請求我們的任務資源的第二個版本。這是一個用來返回單獨一個任務的函數:
第二個函數有些意思。這里我們得到了 URL 中任務的 id,接著 Flask 把它轉換成 函數中的 task_id 的參數。
我們用這個參數來搜索我們的任務數組。如果我們的資料庫中不存在搜索的 id,我們將會返回一個類似 404 的錯誤,根據 HTTP 規范的意思是 「資源未找到」。
如果我們找到相應的任務,那麼我們只需將它用 jsonify 打包成 JSON 格式並將其發送作為響應,就像我們以前那樣處理整個任務集合。
調用 curl 請求的結果如下:
當我們請求 id #2 的資源時候,我們獲取到了,但是當我們請求 #3 的時候返回了 404 錯誤。有關錯誤奇怪的是返回的是 HTML 信息而不是 JSON,這是因為 Flask 按照默認方式生成 404 響應。由於這是一個 Web service 客戶端希望我們總是以 JSON 格式回應,所以我們需要改善我們的 404 錯誤處理程序:
我們會得到一個友好的錯誤提示:
接下來就是 POST 方法,我們用來在我們的任務資料庫中插入一個新的任務:
添加一個新的任務也是相當容易地。只有當請求以 JSON 格式形式,request.json 才會有請求的數據。如果沒有數據,或者存在數據但是缺少 title 項,我們將會返回 400,這是表示請求無效。
接著我們會創建一個新的任務字典,使用最後一個任務的 id + 1 作為該任務的 id。我們允許 description 欄位缺失,並且假設 done 欄位設置成 False。
我們把新的任務添加到我們的任務數組中,並且把新添加的任務和狀態 201 響應給客戶端。
使用如下的 curl 命令來測試這個新的函數:
注意:如果你在 Windows 上並且運行 Cygwin 版本的 curl,上面的命令不會有任何問題。然而,如果你使用原生的 curl,命令會有些不同:
當然在完成這個請求後,我們可以得到任務的更新列表:
剩下的兩個函數如下所示:
⑹ python怎麼調用java程序
把java封裝成restful介面,然後python通過遠程調用數據。
使用Pyjnius這個python庫。
#源代碼:github.com/kivy/pyjnius
#文檔:pyjnius.readthedocs.org
#也有其他一些的庫,如JPype或Py4j,它們在設計和可用性方面都不是很好。而使用Jython也不為另一種選擇,因為我們想使用python開發Android項目。
#現在就讓我來告訴你,如何簡單的使用Pyjnius:
>>>fromjniusimportautoclass
>>>Stack=autoclass('java.util.Stack')
>>>stack=Stack()
>>>stack.push('hello')
>>>stack.push('world')
>>>stack.pop()
'world'
>>>stack.pop()
'hello'
⑺ Python做自動化介面調用參數怎麼寫
REST(REpresentationStateTransfer)描述了一個架構樣式的網路系統,比如web應用程序。它首次出現在2000年RoyFielding的博士論文中,他是HTTP規范的主要編寫者之一。REST指的是一組架構約束條件和原則。滿足這些約束條件和原則的應用程序或設計就是RESTful。Web應用程序最重要的REST原則是,客戶端和伺服器之間的交互在請求之間是無狀態的。從客戶端到伺服器的每個請求都必須包含理解請求所必需的信息。如果伺服器在請求之間的任何時間點重啟,客戶端不會得到通知。此外,無狀態請求可以由任何可用伺服器回答,這十分適合雲計算之類的環境。客戶端可以緩存數據以改進性能。在伺服器端,應用程序狀態和功能可以分為各種資源。
⑻ Python與Java如何構建通信請給出一個學習方向。
1、python提供restful介面,java直接調用restful api即可;
2、rpc通信,現成框架例如grpc。 java 和python都支持。
3、消息隊列,python計算結果存到消息隊列,java端訂閱處理即可。相當於引入一個中間代理角色。
思路大概就上面的方式,根據實際場景進行技術選型。
⑼ python怎樣調用Java中類
這個有幾種方式,你看看哪種更適合你。
把java封裝成restful介面,然後python通過遠程調用數據。
使用Pyjnius這個python庫。
#源代碼:github.com/kivy/pyjnius
#文檔:pyjnius.readthedocs.org
#也有其他一些的庫,如JPype或Py4j,它們在設計和可用性方面都不是很好。而使用Jython也不為另一種選擇,因為我們想使用python開發Android項目。
#現在就讓我來告訴你,如何簡單的使用Pyjnius:
>>>fromjniusimportautoclass
>>>Stack=autoclass('java.util.Stack')
>>>stack=Stack()
>>>stack.push('hello')
>>>stack.push('world')
>>>stack.pop()
'world'
>>>stack.pop()
'hello'
如果解決了您的問題請採納!
如果未解決請繼續追問!
⑽ python 後端restful 前端怎麼調取數據
主要就是js對數據的操作和對dom的操作。 前端的工作就是切圖,展示數據到網頁中。那麼怎麼獲取數據呢?以什麼格式獲取數據呢?都是需要和後台交互的。 後台語言都是不一樣的:php,jsp等等,我們前端js的工作就是把他們的數據拿過來顯示。