支持POST数据和JSON格式的请求


Supporting both POST data and JSON formatted requests in slim 2

我正在维护一个用slim 2编写的后端API。该api主要由移动应用程序使用,所以我希望从发送请求作为POST数据切换到发送JSON格式字符串。这将简化api,因为应用程序目前发送数组,甚至json字符串作为post数据变量。

虽然很容易发布一个更新到移动应用程序和切换到json格式的POST请求,后端api将不得不保持支持这两种格式一段时间,直到所有用户将更新他们的应用程序。

我正在寻找$app->request->post()的替换函数,该函数将从post数据或json数据中获取请求参数,具体取决于客户端发送的内容类型。

例如,我使用$app->request->post('user_id', 0);从post数据中获取变量。

我已经安装到我的api,它确实转换json体成一个数组。问题是,现在我的每个api函数都必须检查$app->json_body数组或$app->request->post函数来检索请求参数。

例如:

$app->get('/settings', function () use($app, $freeze)
{
   if ($app->json_body != null) {
      $user_id = $app->json_body['user_id'];
   } else {
      $user_id = $app->request->post('user_id', 0);
   }
}

这是相当直接地创建一个全局函数,这样做,但我希望有苗条的$app实例的功能。

您可以尝试使用https://github.com/slimphp/Slim-Middleware并确保带有JSON主体的请求包含正确的Content-Type: application/json头。