如何接收和处理JSON在瓶?(How to receive and process JSON in

2019-10-29 21:19发布

我有一个树莓派的设置,需要能够接收JSON(从Salesforce)。 我不是很熟悉JSON,但我相信这是可能的REST API。

反正,我已经下载的烧瓶中加入应该能为我做这些的。 当它收到这个JSON,我需要它有一个Python脚本,或在为这个剧本我已经有设置相同的工作方式工作。 (这是脚本: 在这里 )。 该脚本远程控制一些电源插座,我想Salesforce来能够把一个一个,触发时。 到目前为止,我可以控制从一个网络接口电源,即使用URL变量,或者从形式POST。 这一切运作良好。

我只是在最后阶段,也是一个我至少经历,会是什么JSON的Salesforce可以像发送样子? 如何解析这个并使其控制通过Python电源插座?

Answer 1:

你的计划是这样的:

[Salesforce的<---> [烧瓶API] < - > [树莓PI]

Salesforce的将创建一个必须被发送到您的水壶API,随着树莓交互JSON消息。

我看你有树莓PI的相互作用准备,所以你应该创建瓶端点从外部触发。

作为一对夫妇烧瓶端点中的一个示例:

# define a "power ON api endpoint"
@app.route("/API/v1.0/power-on/<deviceId>",methods=['POST'])
def powerOnDevice(deviceID):
    payload = {}
    #get the device by id somehow
    device = devices.get(deviceId)
    # get some extra parameters 
    # let's say how long to stay on
    params = request.get_json()
    try:

      device.turn_on(params['durationinminutes'])
      payload['success'] = True
      return payload
    except:
      payload['success'] = False
      # add an exception description here
      return payload

# define a "power OFF api endpoint"
@app.route("/API/v1.0/power-off/<deviceId>",methods=['POST'])
def powerOffDevice(deviceID):
    payload = {}
    #get the device by id somehow
    device = devices.get(deviceId)
    try:
      device.turn_off()
      payload['success'] = True
      return payload
    except:
      payload['success'] = False
      # add an exception description here
      return payload

在销售队伍方面,你需要创建一个对象结构来跟踪设备,但是我想表明什么是发送JSON消息,您的水壶API所需的APEX代码。

你将有一个DevicesController类,将有将从visualforce网页触发方法让我们说Devices.page

举个例子你就必须在设备上打开的方法:

// this should return something but for the sake of simplicity
public void turnDeviceOn(String externalDeviceId, Integer durationInMinutes){
 # generate json message
 JSONGenerator gen = JSON.createGenerator(true);
 gen.writeStartObject();
 gen.writeIntegerField('durationinminutes', durationInMinutes);
 gen.writeEndObject();
 # generate http request

 HttpRequest req  = new HttpRequest();
 req.setMethod('POST');
 # this endpoint must be added as a remote endpoint in Salesforce org setup!
 req.setEndpoint('http://yourapiurl/API/v1.0/power-on/'+externalDeviceId);
 req.setBody(gen.getAsString());

 HTTPResponse res = h.send(req);

}

请注意,这是一个基本的Salesforce < - >瓶API的例子。 你需要添加一个认证机制,并更好地控制对整个流程。

编辑:

既然你问,如果这可以被添加到您的代码, 我已经分叉的回购和整合这瓶端点码到您的power.py文件。 最好的解决办法是,你应该把它放在一个分隔的类并在不同的文件处理路由,但可全在一起,使你的想法。 您可以克隆它,安装瓶模块:

pip install flask

并与执行:

python power.py

然后加入测试端点:

curl -X POST  http://localhost:5000/API/v1.0/power-on/<deviceid>


文章来源: How to receive and process JSON in Flask?