我开始学习如何正确使用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函数,它只返回一个空字符串,如下所示:
Array
(
)
我想知道是否有某种apache配置文件会阻止这些函数或其他内容的数据?
答案 0 :(得分:2)
可能的问题: 您是否仔细检查过请求标题中所选的Content-Type是否正确? 我怀疑客户端正在感知从服务器端发送的格式错误的标记语言。
可能的解决方案: 更改内容类型:application / x-www-form-urlencoded to application / JSON,反之亦然。
答案 1 :(得分:0)
接收教程 $ name = $ app-&gt; request-&gt; post('name');
POST参数必须在Payload数据中 名称=提供yourname&安培;密码= PASS&安培; email=me@mail.com 应用程序/ x-WWW窗体-urlencoded
如果您在URL之后但不在有效内容数据中提供参数,那么就是GET请求。在这种情况下,教程部分工作(它看到验证所需参数的参数存在),但是当它应该只查看POST的有效负载参数时,它正在寻找“任何地方”的参数。