2015-02-05 70 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的有效載荷參數中查找。