Как сделать запрос REST API с Ajax и токеном сессии? - PullRequest
0 голосов
/ 04 марта 2020

У меня проблемы с выполнением Руководства по API с использованием AJAX. Я успешно получил токен сеанса из API входа в систему, поскольку токен сеанса необходим для отправки запросов к данным GET / POST.

Код для получения токена сеанса:

             
        var sessionToken = null;

        $.ajax({
          url: '<API-URL>/1/json/user_login/',
          data: {
          	'login_name' : 'USERNAME',
            'password' : 'PASSWORD'
          },
          type: 'GET',
          dataType: 'json',
          success: function(data) { 
            sessionToken = data.response.properties.session_token;
            $("#result").text("Got the token: " + sessionToken);
          },
          error: function(err) { console.log(err); },
          beforeSend: setHeader
        });
        
      function setHeader(xhr) {
        xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
      }

При успешном завершении мы получаем токен сеанса: D67ABD0454EB49508EAB343EE11191CB4389255465

{response: {…}}
response:
properties:
action_name: "user_login"
data: [{…}]
action_value: "0"
description: ""
session_token: "D67ABD0454EB49508EAB343EE11191CB4389255465"
__proto__: Object
__proto__: Object
__proto__: Object

Теперь, когда у меня есть действующий токен сеанса, теперь я могу делать запросы на получение данных. Я пытаюсь получить данные драйвера, используя следующий код:

            $.ajax({
            url: '<API-URL>/1/json/api_get_data/',
            data: {
              'license_nmbr' : vrn,
              'session_token' : sessionToken
            },
            type: 'POST',
            //dataType: 'json',
            success: function(data) {
              //var obj = JSON.parse(data);
              console.log(data);
            },
            error: function(err) { console.log(err); },
            beforeSend: setHeader
        });

Согласно документации, мне нужно использовать POST вместо GET, чтобы получить данные об автомобиле в ответе и передать маркер сеанса в качестве параметра:

Documentation

К сожалению, кажется, что возвращаются пустые данные при использовании GET и Permission denied при использовании POST. Я попытался отправить параметры в виде массива, как в документации, но это также не удается. Я попытался передать маркер сеанса как авторизацию, но все равно не получил ответа.

Единственная помощь, которую я получил от группы поддержки API, была: «POST не может быть с запросом параметра в конечной точке».

Что я делаю не так?

Любая помощь приветствуется. Спасибо!

1 Ответ

2 голосов
/ 04 марта 2020

Я не знаю, какую службу / API вы пытаетесь вызвать, но из сообщения об ошибке, которое вы опубликовали, и краткой документации, похоже, вы неправильно структурировали свой URL:

$.ajax({
            url: '<API-URL>/1/json/api_get_data/',
            data: {
              'license_nmbr' : vrn,
              'session_token' : sessionToken
            },
            type: 'POST',
            //dataType: 'json',
            success: function(data) {
              //var obj = JSON.parse(data);
              console.log(data);
            },
            error: function(err) { console.log(err); },
            beforeSend: setHeader
        });

Вы включаете параметр action в качестве части URL-адреса, когда вы публикуете, что do c подразумевает, что он должен быть частью данных (а ошибка, которую они вам отправили: «POST не может»). быть с параметром запроса в конечной точке. "также поддерживает это). Поэтому попробуйте следующее: (конечно, не видя больше документов, трудно понять, верен ли ваш действительный базовый URL)

$.ajax({
            url: '<API-URL>/1/json/',
            data: {
              'action': {'name':'api_get_data',
              'parameters': [ {'license_nmbr' : vrn }],

              'session_token' : sessionToken
              }
            },
            type: 'POST',
            //dataType: 'json',
            success: function(data) {
              //var obj = JSON.parse(data);
              console.log(data);
            },
            error: function(err) { console.log(err); },
            beforeSend: setHeader
        });

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...