2015-02-05 48 views
2

我开始学习如何正确使用REST API的下一个流行的教程here

当试图创建一个简单的POST的API我一直运行到一个400错误,截至目前,我还没有找到任何答案。

API如下:

$app->post('/test', function() use ($app) { 
//    check for required params 
      verifyRequiredParams(array('email')); 
      echo "Success"; 
}); 

其试图用的代码块,从教程不变来验证“电子邮件”参数:

function verifyRequiredParams($required_fields) { 
    $error = false; 
    $error_fields = ""; 
    $request_params = array(); 
    $request_params = $_REQUEST; 
    // Handling PUT request params 
    if ($_SERVER['REQUEST_METHOD'] == 'PUT') { 
     $app = \Slim\Slim::getInstance(); 
     parse_str($app->request()->getBody(), $request_params); 
    } 
    foreach ($required_fields as $field) { 
     if (!isset($request_params[$field]) || strlen(trim($request_params[$field])) <= 0) { 
      $error = true; 
      $error_fields .= $field . ', '; 
     } 
    } 

    if ($error) { 
     // Required field(s) are missing or empty 
     // echo error json and stop the app 
     $response = array(); 
     $app = \Slim\Slim::getInstance(); 
     $response["error"] = true; 
     $response["message"] = 'Required field(s) ' . substr($error_fields, 0, -2) . ' is missing or empty'; 
     echoRespnse(400, $response); 
     $app->stop(); 
    } 
} 

代码总是失败,400错误代码,因为它似乎$ _REQUEST函数正在返回一个空数组。任何想法可能会出错?我正在开发一个运行apache的ubuntu服务器。

Slim API框架设置正确,因为我可以通过Google的Advanced Rest Client调用一个非常简单的调用,它可以正确回应响应。我肯定会将正确的参数传递给api。

更新:我也试着从API直接运行$ _REQUEST和$ _GET功能,它只是返回一个空字符串是这样的:如果有某种Apache的配置文件的

Array 
(
) 

我不知道这阻止了这些功能的数据或东西?

回答

2

可能的问题: 您是否已经仔细检查过请求标题中所选的内容类型是否正确? 我怀疑客户端正在感知从服务器端发送的畸形标记语言。

可能的解决方案: 更改内容类型:application/x-www-form-urlencoded到application/JSON,反之亦然。

0

欲获得教程可获得 $ name = $ app-> request-> post('name');

的POST参数必须在有效载荷数据 名称=提供yourname &密码=传递& [email protected] 应用程序/ x-WWW窗体-urlencoded

如果后提供的参数URL但不在有效负载数据中,即GET请求。在这种情况下,教程部分工作(它看到的参数来验证所需的参数是存在的),但它正在寻找参数“任何地方”,当它应该只在POST的有效载荷参数中查找。