2014-03-28 46 views
1

正如您從以前的問題中可以看到的,我一直在做一個項目,並且非常想知道如何才能完成最後一部分。如何製作燒瓶端點?

項目快速總結:我有一個運行Web Server(Lighttpd)和Flask的Raspberry Pi。它連接了一個RF USB發射器,通過Python腳本控制插頭的電源。 (GitHub上的Power.py)。這工作。

我現在需要在Flask中創建一個Endpoint,以便Salesforce可以向其發送一些JSON,並且它會理解它。

我想盡可能保持簡單,所以我明白它究竟在做什麼。在我最後一個問題中,有人確實給了我一些東西,但我認爲最好有一個與之相關的具體問題,而不是試圖掩蓋太多。

所有我需要能夠發送是'power=on/off''device=0,1,2''time=(secondsasinteger)''pass=thepassword'我可以把這個作爲URL變量,或張貼到我現有的power.py上面鏈接,它也它。

我想要一個簡單明瞭的方式,將此消息從JSON中的Salesforce發送到Flask,並使其理解請求。

從字面上看所有我現在需要做的就是去:ip/cgi-bin/power.py?device=0&power=on&time=10&pass=password

這將加載一個Python腳本,並在10秒關閉設備0。 (0是無限的)。

我該如何將其轉換爲JSON?我需要將哪些代碼放入Flask以便能夠理解這一點?我可以將變量轉發到power.py,因此Flask文件只需查找變量和值?

我已經在Chrome下載Postman,這允許我發送POST到Pi來測試東西。

作爲初學者,我可以在哪裏找到關於此的更多信息?

我可以發送這樣的東西嗎?

'requestNumber = JSONRequest.post(
"ip/api.py", 
{ 
    deviceid: 0, 
    pass: "password", 
    time: 60, 
    power: "on" 
},' 
+0

任何一個'@app.route (...)'裝飾器是一個端點。你讀過[Flask Quickstart](https://flask.readthedocs.org/en/latest/quickstart/)了嗎?你可能也想遵循[tutorial](http://flask.readthedocs.org/en/latest/tutorial/)。 –

+0

我已經完成了快速入門並創建了Hello World,並顯示了時間。雖然我還沒有經歷過這個教程,但它似乎過於複雜了。我只有4個變量,並且有一個可以管理它們的腳本,我從字面上只需要JSON來發送這些信息,而Pi就能理解它。不過我現在要通過這個教程。謝謝] –

+0

請參閱['request.get_json()'](http://flask.readthedocs.org/en/latest/api/#flask.Request.get_json);當某些東西用'application/json' mimetype發佈JSON時,'request'對象上的方法將允許您訪問解析的Python表示。 –

回答

2

我不知道如何讓saleforce發送帶有關聯JSON的POST請求,但使用Flask捕獲它非常簡單。請看下面的例子:

from flask import request 
from yourmodule import whatever_function_you_want_to_launch 
from your_app import app 

@app.route('/power/', methods=['POST']) 
def power(): 
    if request.headers['Content-Type'] == 'application/json': 
     return whatever_function_you_want_to_launch(request.json) 
    else: 
     return response("json record not found in request", 415) 

時saleforce訪問的URL http://example.com/power/您的應用程序執行傳遞給它的功率()函數,作爲參數,包含JSON內容的字典。 whatever_function_you_want_to_launch函數可以使用字典來觸發您想要執行的任何操作,並將響應返回給power()函數。 power()函數會將此respose返回給salesforce。

例如:

def whatever_function_you_want_to_launch(data): 
    device = data['deviceid'] 
    power = data['power'] 
    message = "" 
    if power == "on": 
     turn_power_on(device) 
     message = "power turned on for device " + device 
    else: 
     turn_power_off(device) 
     message = "power turned off for device " + device 
    return make_response(message, 200) 

這僅僅是一個簡單的例子,當然。您需要添加一些其他內容(例如處理JSON格式錯誤或不包含請求的密鑰之一的情況)。

爲了與這種類型的語法來測試整個的東西,你也可以使用curl命令(可在Linux上,不知道其他操作系統):

curl -H "Content-type: application/json" -X POST http://localhost:5000/power/ -d '{"deviceid": "0", "pass": "password", "time": "60", "power": "on"}'