如何接收JSON POST?
第一次来这里,听说要具体一点……那我就开始吧。
我正在做一个小项目,目的是把Salesforce和我的树莓派连接起来。目标是当Salesforce里有客户提交的高优先级案件时,让一个灯(想象一下像信号灯或警报灯那样的灯)闪烁。目前,客户通常会向一个特定的邮箱发送邮件,这样就会创建一个案件。这个案件会进入“未分配队列”,并且会给团队发邮件,告诉他们这个案件在等待分配。
Salesforce使用的是REST,所以我需要让树莓派能够接受JSON格式的数据,这样它才能轻松理解Salesforce想让它做什么。
目前,我觉得我已经完成了一半的工作。我在树莓派上运行了一个网页服务器(Lighttpd),它托管了一个主页和一个Python脚本。我还使用了一个Python封装工具,这样我就可以轻松地运行我安装的Telldus程序中的命令。这个程序控制着我连接的USB无线发射器,它和一个无线插座配对,插座连接到电源,电源上有一个灯。
这个Python脚本叫做power.py,可以通过URL变量来控制,所以如果我访问power.py?device=1&power=on&time=10&password=hunter2,这样就会让设备1开10秒。我还在主页上创建了一个POST表单,它只是把数据POST到Python脚本,运行的方式和使用URL变量一样。这一切都运行得很好。
所以我需要做的就是把它连接到Salesforce。我想使用REST和JSON,这样如果将来我换到其他客户关系管理(CRM)程序,它也能轻松适应并接收新的指令。
我在这里发布了我正在使用的Python脚本: https://github.com/7ewis/RemotePiControl/blob/master/power.py
目前,树莓派不允许连接到外部网络,所以我需要想办法发送JSON命令,并接收并转换它们,以便使用正确的变量等等。我不是程序员,只是通过破解和探索接触过一些编程语言。所以我需要一些指导。
我之前从未使用过REST或JSON,那么我需要做些什么才能实现这个目标呢?
2 个回答
首先,不要直接用一个打印结果的Python脚本来做CGI,这样你会一直在调试它。
建议使用一个轻量级的框架,比如Flask。你可以做一些非常简单的事情,比如:
from flask import Flask
application = Flask(__name__)
@application.route('/', methods=['GET', 'POST'])
def index():
if request.method == 'POST':
# use Flask's build in json decoder
the_data = request.get_json()
# then do something with the data
return "This was a POST request, how interesting..."
else:
# request was GET rather than POST, so do something with else
return "Hello World!"
想知道如何配置Flask与Lighttpd一起运行,可以查看这里 http://flask.pocoo.org/docs/deploying/fastcgi/
如果你想测试这个,可以写另一个Python脚本来发送JSON数据到你的服务器(我推荐你看看Python的Requests库,链接在这里 http://www.python-requests.org/en/latest/),或者你也可以手动使用一个HTTP请求构建工具,比如Firefox的HTTPRequester插件 (https://addons.mozilla.org/en-US/firefox/addon/httprequester/)。
在你的树莓派网页服务器上添加Flask(一个轻量级的Python框架)听起来是个不错的主意。它可以让你在服务器端运行Python代码,以响应JQuery的ajax请求(还有普通请求)。你可以在这里查看几个示例:
http://flask.pocoo.org/docs/patterns/jquery/
还有这个Stack Overflow的问题:我怎么能在Flask中使用ajax发送的数据?
Flask的安装和使用都很简单,而且它可以和多种服务器一起工作,包括Lighttpd。写RESTful风格的Flask应用也是个不错的选择,看看这个链接:http://blog.miguelgrinberg.com/post/designing-a-restful-api-with-python-and-flask
另外,很多人已经在树莓派上使用过Flask,所以这可能会帮助你顺利启动:http://mattrichardson.com/Raspberry-Pi-Flask/
祝你好运!