如何一起发送JSON请求和发布表单数据请求?

时间:2016-10-03 07:29:53

标签: php json rest postman

所以这是一个API,它应该接受POST请求中的以下参数:

token (as form data)
apiKey (as form data)
{
"notification": {
    "id": 1,
    "heading": "some heading",
    "subheading": "some subheading",
    "image": "some image"
     }
 } (JSON Post data)

现在我的问题是我无法在同一个POST请求中将表单数据和JSON数据一起发送。由于表单数据使用Content-Type: application/x-www-form-urlencoded而JSON需要Content-Type: application/json,因此我不确定如何将它们一起发送。我使用的是Postman。

编辑:

所以api会调用函数create,我需要做这样的事情:

public function create() {


    $token = $this -> input -> post('token');
    $apiKey = $this -> input -> post('apiKey');
    $notificationData = $this -> input -> post('notification');

    $inputJson = json_decode($notificationData, true);
    }

但我无法获取JSON数据并将数据组合在一起。

我必须这样才能获得JSON数据

public function create(){
$notificationData =  file_get_contents('php://input');
$inputJson = json_decode($input, true);  
} // can't input `token` and `apiKey` because `Content-Type: application/json`

1 个答案:

答案 0 :(得分:3)

几种可能性:

  1. 将令牌和密钥作为查询参数发送,将JSON作为请求正文发送:

    POST /my/api?token=val1&apiKey=val2 HTTP/1.1
    Content-Type: application/json
    
    {"notification": ...}
    

    在PHP中,您可以通过$_GET获取密钥和令牌,并通过json_decode(file_get_contents('php://input'))获取正文。

  2. Authorization HTTP标头(或任何其他自定义标头)中发送令牌和密钥:

    POST /my/api HTTP/1.1
    Authorization: MyApp TokenVal:KeyVal
    Content-Type: application/json
    
    {"notification": ...}
    

    您可以通过$_SERVER['HTTP_AUTHORIZATION']获取标题并自行解析。

  3. 制作请求正文的令牌和关键部分(不是非常首选):

    POST /my/api HTTP/1.1
    Content-Type: application/json
    
    {"key": val1, "token": val2, "notification": ...}