所以这是一个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`
答案 0 :(得分:3)
几种可能性:
将令牌和密钥作为查询参数发送,将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'))
获取正文。
在Authorization
HTTP标头(或任何其他自定义标头)中发送令牌和密钥:
POST /my/api HTTP/1.1
Authorization: MyApp TokenVal:KeyVal
Content-Type: application/json
{"notification": ...}
您可以通过$_SERVER['HTTP_AUTHORIZATION']
获取标题并自行解析。
制作请求正文的令牌和关键部分(不是非常首选):
POST /my/api HTTP/1.1
Content-Type: application/json
{"key": val1, "token": val2, "notification": ...}