YiiFramework как перередать параметры подключения в заголовке запроса при тестированием curl-ом

mstdmstd

Новичок
Всем привет,
Пытаюсь запустить RESTFullYii как описано тут https://github.com/evan108108/RESTFullYii/tree/v1.15

Застрял на том как перередать параметры подключения в заголовке запроса при тестированием curl-ом, я получал ошибку :
You are not authorized to preform this action.
PHP:
$service_url = 'http://localhost/local-yii-tyb.com/tybapp/api/good';  /// API GET URL;
$curl = curl_init($service_url);
  // echo '<pre>$curl::'.print_r($curl,true).'<pre>';
curl_setopt( $curl, CURLOPT_HEADER, true );
curl_setopt( $curl, CURLOPT_HTTPHEADER, array( 'HTTP_X_REST_USERNAME' => Yii::app()->params['RESTusername'], 'HTTP_X_REST_PASSWORD' => Yii::app()->params['RESTpassword'] ) );
// я полагал что где-то так - но не помогло

В самом расширении я нашел строки
PHP:
      if(!(isset($_SERVER['HTTP_X_'.self::APPLICATION_ID.'_USERNAME']) and isset($_SERVER['HTTP_X_'.self::APPLICATION_ID.'_PASSWORD']))) {
        // Error: Unauthorized
        throw new CHttpException(401, 'You are not authorized to preform this action.');
      }
где self::APPLICATION_ID = 'REST'
А как правильно ?
 

mstdmstd

Новичок
Оказывается можно так :
Код:
$.ajax({
    url: "http://www.example.com/index.php",
    dataType: "json",
    type: "GET",
    beforeSend: function(xhr) {
        xhr.setRequestHeader("X_REST_USERNAME", "XXXX");
        xhr.setRequestHeader("X_REST_PASSWORD", "XXXX");
        console.log(xhr);
    },
    success: function(data, textStatus, XMLHttpRequest) {
            alert(data);
    },
    error: function(XMLHttpRequest, textStatus, errorThrown) {
    console.log(XMLHttpRequest);
    }
})
 
  • Like
Реакции: AmdY

mstdmstd

Новичок
Я сделал 3 GET запроса как описано тут http://www.yiiframework.com/extension/restfullyii
3 запроса, потому что кроме списка и одного элемента я сделал выбор части товаров по коду группы вида
http://localhost/local-yii-tyb.com/tybapp/api/good?goodgroup_id=3

Я вывел часть данных на экран кодом :

Код:
function get_goods_list_by_group_id(goodgroup_id) {
  $.ajax({
  url: 'http://localhost/local-yii-tyb.com/tybapp/api/good?goodgroup_id=' + goodgroup_id,
  dataType: "json",
  type: "GET",
  beforeSend: function(xhr) {
  xhr.setRequestHeader("X_REST_USERNAME", "<?php echo Yii::app()->params['RESTusername'] ?>");
  xhr.setRequestHeader("X_REST_PASSWORD", "<?php echo Yii::app()->params['RESTpassword'] ?>");
  console.log(xhr);
  },
  success: function(data, textStatus, XMLHttpRequest) {
  alert( "get_goods_list_by_group_id success::"+var_dump(data) );
  var L= data.data.length
  var res_data= "status:"+ XMLHttpRequest.status +"<br> "+ "  statusText:"+ XMLHttpRequest.statusText +"<br> "+  var_dump(data.data) + "<br>";
  for ( I= 0; I< L; I++ ) {
  res_data= res_data + "<b>" + I + "</b>::" + var_dump(data.data[I])+"<br>"
  }
  $("#div_results").html( res_data );
  },
  error: function(XMLHttpRequest, textStatus, errorThrown) {
  console.log(XMLHttpRequest);
  }
  });
}
И firebug вывел такие заголовки:

1)Меня крайне удивило, что видны логин и пароль. То есть, они хранятся в конфиг файле и получается что юзер, который сидит за прогой
обновления данных(если обновление данных сделано способом описанным выше), легко может их увидеть ? Я так понимаю что если я пишу RESTFull сервис - то на чем
будет сделано программа получения данных - не моя забота, но хочется понимать что я делаю и делать самому тесты соответственно.
Можно делать с командной строки curl-ом ( который есть и под линуксом и виндами ) - но не совсем понятно а куда будут выведены данные?

Про то что не удалось передать пароль и логин используя curl_init в PHP я выше писал...

2) Несколько лет назад я писал прогу с API для ipad-ов где по запросу можно было получить данные
http://s017.radikal.ru/i421/1201/dd/df6f7fefcb57.png
также аналогичными запросами можно было логиниться и создавать заказы и много чего разного...
Я показал эти запросы потенциальному клиенту - он сказал что это хорошо но это не RESTFull...

В чем и вопрос что хочется соответсвовать станднартам RESTFull...
 

vasinsky

Новичок
а причём тут Yii - когда код в jquery

тут и чистым JS можно вообще обойтись
PHP:
function get_goods_list_by_group_id(goodgroup_id) {
        var xmlhttp;
        if ( window.XMLHttpRequest ) {
            // IE7+, Firefox, Chrome, Opera, Safari
            xmlhttp = new XMLHttpRequest();
        } else {
            // IE6, IE5
            xmlhttp = new ActiveXObject ( "Microsoft.XMLHTTP" );
        }
        xmlhttp.onreadystatechange = function () {
            if ( xmlhttp.readyState == 4 ) {
                // твой ответ в xmlhttp.responseText
                document.getElementById("div_results").innerHTML=xmlhttp.responseText;
     
            }
        }
        // в файл getdata.php - делаешь выборку из БД нужной строки в нужное время
        xmlhttp.open ( "GET", "http://localhost/local-yii-tyb.com/tybapp/api/good?goodgroup_id=' + goodgroup_id + '&rand="+Math.random(), true );
        xmlhttp.send ();
    }
Про то что не удалось передать пароль и логин используя curl_init в PHP я выше писал.
http://stackoverflow.com/questions/12852534/basic-authentication-using-xhr - если я правильно понял

но не совсем понятно а куда будут выведены данные?
захочешь - в файл
 

mstdmstd

Новичок
Я сделал небольшую демо задачу с использованием RESTFull -а и хотел бы проконсультироваться насчет, скажем так, стандартов RESTFull-а - у кого есть время /желание посмотрите пожалуйста - буду благодарен за комментарии по теме.
Я написал небольшую демо програмку мспользуя php/yii 1.1.15 фреймворк и https://github.com/evan108108/RESTFulYii/tree/v1.15 расширение.
Ссылка http://dev9.softreactor.com/tybapp/apis_testing/restful_with_goods
Там есть небольшое описание, кликая на кнопке "Info Description".
Там работа с 2-мя таблицами : клиенты и товары - данные считываются, добавляются, редактируются, удаляются и т. д...
Сами запросы выводятся под лейблом Request Url: - ну и можно посмотреть как запросы так и полученные данные используя тулзы, вроде firebug-а Firefox-а.
Меня интересует правильность с точки зрения RESTFull - а
Как я уже писал выше, несколько лет назад я писал прогу с API для ipad-ов где по запросу можно было получить данные.
http://s017.radikal.ru/i421/1201/dd/df6f7fefcb57.png
также аналогичными запросами можно было логиниться и создавать заказы и много чего разного...
Я показал эти запросы потенциальному клиенту - он сказал что это хорошо, но это не RESTFull...

В чем и вопрос, что хочется соответсвовать станднартам RESTFull...

Внизу есть 5 ссылок Good Controller Good Model Client Controller Client Model ERestController with my changes - это контроллы, модули и основной файл этого расширения.

Сама страница страница с тестированием - тастестирование средствами JS - мне кажется для тестирования этого достаточного - для практического использования надо что-либо другое как упоминалось выше.
 
Последнее редактирование:

grigori

( ͡° ͜ʖ ͡°)
Команда форума
Вурдалак, фразу "ты задолбал" правильно оформить отдельным предложением и закончить восклицательным знаком!
 
  • Like
Реакции: WMix

mstdmstd

Новичок
И то правда "RESTFull" - пошло от компонента который я пользовал - надо у себя подправить...
А еще комментарии по существу есть?
 
Сверху