使用JSON和cURL通过PHP发布到Dreamfactory API

时间:2015-02-07 21:00:21

标签: php mysql json curl

如果您不熟悉,请查看dreamfactory.com - 一个非常简洁的开源API平台,可以连接到任何数据库,无论是mysql,nosql等。

我在使用cURL将JSON发布到我使用Dreamfactory设置的API时遇到了困难。它不是POST部分,而是Dreamfactory在您打电话之前需要如何使用该服务启动会话。我正在寻求有关如何首先创建会话然后发出POST请求的最佳实践的建议。

以下是有关如何连接到Dreamfactory服务和拨打电话的一些基本信息:

要登录,只需发布​​到/ rest / user / session - 足够简单

curl -i -k -3 -X POST https://dsp-yourdsp.cloud.dreamfactory.com/rest/user/session \
 -H "X-DreamFactory-Application-Name: todojquery" \
 -d '{ "email" : "foo@bar.com", "password" : "yourpassword" }'

该服务将返回一个session_id,然后您可以将其作为标题包含在内,以便对API进行其他调用。

示例POST请求,用于将JSON发布到演示服务

curl -i -k -3 -X POST https://dsp-yourdsp.cloud.dreamfactory.com/rest/db/todo \
  -H "X-DreamFactory-Application-Name: todojquery" \
  -H "X-DreamFactory-Session-Token: bhc7lov8r41h4cbn6pue1r63gbgh7jf6" \
  -d '{ "name" : "curl todo", "complete" : false }'

我已成功使用带有此代码的cURL创建会话:

<?php

    $data = array("email" => "john@website.com", "password" => "password");                                                                    
    $data_string = json_encode($data); 

    $ch = curl_init('https://api.website.com/rest/user/session');                                                                      
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");                                                                     
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);                                                                  
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);                                                                      
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(                                                                          
        'X-DreamFactory-Application-Name: website-api'
    ));                                                                                                                   

    $result = curl_exec($ch);
    $response = json_decode($result);
    curl_close($ch);
    var_dump($response->session_id);



?>

所以,使用返回的数组我可以得到session_id,但我的问题是,使用session_id并对API进行新调用的最佳方法是什么?下一步是什么?我是否打开卷曲连接并创建POST功能?是否有一个cURL的一体化功能可以一次创建一个会话和POST?

1 个答案:

答案 0 :(得分:1)

是的,您可以继续使用您拥有的内容,并在下次调用时将会话添加为X-DreamFactory-Session-Token。如果您要从该脚本进行多次调用,这非常有用。

如果您只想拨打一个电话(或几个电话),您还可以利用版本1.9中添加的Basic HTTP Authentication支持。

-u选项应该起作用(-u myusername:mypassword)或传递上面链接中提到的Authorization标头(不要忘记'Basic'.base64_encode($ username。':'。$ password)。