2016-02-23 2 views
1

Я использую AWS API Gateway. Я хочу отправить данные в контроллер, который находится в моем каталоге. Я создал один API, у которого есть ресурс разработки и метод POST. Я также добавил метод OPTIONS для добавления заголовков.Как разместить данные с помощью AWS API Gateway Http?

Я использую ajax для отправки данных запроса контроллеру. Данные всегда пусты. контроллер находится в CakePHP

функция, которую я называю это

function webservice() { 

    if(empty($this->data['username'])){ 

     echo json_encode("Data is Empty"); 
    } 
    else{ 
     $username = $this->data['username']; 
     $password = $this->data['password']; 
     $deviceType = $this->data['deviceType']; 
     $token = $this->data['token']; 

     $conditions= array('username' => $username, 
          'password' => $password, 
          'token' => $token, 
          'deviceType' => $deviceType 
          ); 
       echo json_encode($conditions); 
    } 

    exit(); 

    } 

Ajax Вызов:

var username = "dummydata"; 
var password = "dummydata"; 
var deviceType = "dummydata" 
var token = "dummydata"; 

alert(username + password + token); 
    $.ajax(
    { 
    type : "POST", 
    url : "https://xxxxxxxxxx.execute-api.ap-southeast-1.amazonaws.com/dev/webserv", 

    data: "{username : username, password: password, token: token, deviceType: deviceType}", 

    success : function(result){ 

     alert((result)); 
    } 

    }); 

Как получать отправленные данные из AJAX в контроллере с помощью AWS API шлюза?

ответ

1

Прежде всего вам нужно предоставить шаблон сопоставления для шлюза API, чтобы он мог сопоставлять данные запроса с вызовом функции Lambda. Во-вторых, обратите внимание на «Тип контента», который вы установили в шаблоне сопоставления, и установите тот же тип контента в своем вызове AJAX, чтобы инициировать использование этого шаблона.

Например, если вы установите тип контента в API шлюза в «приложение/JSON», то вы бы установить это свойство на вашем JQuery AJAX вызова: contentType: "application/json"

Как для шаблона отображения, я считаю, что проще всего используйте шаблон, который всегда отображает все из входящего запроса. Я использую этот шаблон, взятый с this answer:

{ 
    "method": "$context.httpMethod", 
    "body" : $input.json('$'), 
    "headers": { 
    #foreach($param in $input.params().header.keySet()) 
    "$param": "$util.escapeJavaScript($input.params().header.get($param))" #if($foreach.hasNext),#end 

    #end 
    }, 
    "queryParams": { 
    #foreach($param in $input.params().querystring.keySet()) 
    "$param": "$util.escapeJavaScript($input.params().querystring.get($param))" #if($foreach.hasNext),#end 

    #end 
    }, 
    "pathParams": { 
    #foreach($param in $input.params().path.keySet()) 
    "$param": "$util.escapeJavaScript($input.params().path.get($param))" #if($foreach.hasNext),#end 

    #end 
    } 
} 
Смежные вопросы