Реализация API.

Скрипты, разработка, настройка, администрирование

Модераторы: dobs, ArniXXX, hostess, bj

Сообщение
Автор
baytuch
Сообщения: 925
Зарегистрирован: Сб мар 14, 2009 00:23
Откуда: пгт. Войтовцы
Контактная информация:

Реализация API.

#1 Сообщение baytuch » Пт июл 27, 2012 16:47

Ребята, добрый день... Уже давно «чашу тыкву» на эту тему. Так, в частности, интересует целесообразность представление ответа сервера в XML-формате... А не проще сделать «построчный» вывод, что уменьшит трафик и упростит парсинг, собсно?.. Хотя, на данный момент склонен использовать именно использовать именно общепринятый метод...
Пример API-интерфейса ( XML ): юзать
Fusion Player — модуль для CMS PHP-Fusion (demo video: посмотреть)

Не использую пиратского ПО
IP-PBX Asterisk українською. Зроби краще!

«ХО» – мое все.
А ты перевел свой домен на DNSSEC?

Slackware userИзображение

dobs
HO Moderators
Сообщения: 2504
Зарегистрирован: Вс апр 09, 2006 14:42
Откуда: /home/Ukraine/Kyiv
Контактная информация:

Re: Реализация API.

#2 Сообщение dobs » Пт июл 27, 2012 18:58

JSON компактней ХМЛ :idea:

baytuch
Сообщения: 925
Зарегистрирован: Сб мар 14, 2009 00:23
Откуда: пгт. Войтовцы
Контактная информация:

Re: Реализация API.

#3 Сообщение baytuch » Пт авг 17, 2012 17:09

Да, согласен... Но, JSON — фишка JavaScript ( ИМХО ). Хотя уже существуют библиотеки под многие языки программирования, фреймоворки... Честно говоря, больше склонен к использованию XML. Большинство сервисов предоставляют API-интерфейс по средством JSON опционально, а вот XML — гарантировано.

Несколько дней парился с возможностью реализации кросс-доменного Аякса. Хочу отметить, что именно тут использование формата "JSON" подходит идеально.

В общем, на данный момент решил делать API сдвоенным — с поддержкой XML и JSON. Что позволит минимизировать/оптимизировать код, когда займусь написанием клиентов... Предполагаются следующие типы подключений: Web ( Ajax ), с использование упомянутой технологии; PHP ( Web server connect ); C++ ( кросплатформенный фреймворк wxWidgets).

*работу метода можно посмотреть на модели: go
( основано на динамической подгрузке js-файла, сгенерированного серверной частью приложения, где и помещены переменные-ответы. Все просто... )

( На примере не учтен механизм кеширования, но так как js-файл фактически является html-документом ( с тоски зрения сервера и браузера ), то проблем не наблюдается. На деле необходимо править настройки сервера... )
Fusion Player — модуль для CMS PHP-Fusion (demo video: посмотреть)

Не использую пиратского ПО
IP-PBX Asterisk українською. Зроби краще!

«ХО» – мое все.
А ты перевел свой домен на DNSSEC?

Slackware userИзображение

baytuch
Сообщения: 925
Зарегистрирован: Сб мар 14, 2009 00:23
Откуда: пгт. Войтовцы
Контактная информация:

Re: Реализация API.

#4 Сообщение baytuch » Сб авг 18, 2012 12:26

Хмм... На JavaScript в данном случае как-то напряжно использовать JSON в "чистом" виде ( громоздкая загрузка, нужен парсер ). Даже не знаю... Как по мне, то передавать обычные объекты на много удобнее. Зато XML валидный "на все 100" :).

Выходит как-то так:

Код: Выделить всё

var js_data = {
  "com": "noop",
  "status": "ok",
  "id_session": "1111111111111111",
  "data": {
    "information": "API v 0.1"
  }
}
Fusion Player — модуль для CMS PHP-Fusion (demo video: посмотреть)

Не использую пиратского ПО
IP-PBX Asterisk українською. Зроби краще!

«ХО» – мое все.
А ты перевел свой домен на DNSSEC?

Slackware userИзображение

baytuch
Сообщения: 925
Зарегистрирован: Сб мар 14, 2009 00:23
Откуда: пгт. Войтовцы
Контактная информация:

Re: Реализация API.

#5 Сообщение baytuch » Сб авг 18, 2012 21:50

Вроде все работает. Немного сегодня посидел и "допилил" код. Теперь модуль генерирует xml, js и json. Команд минимум — пока "прощупываю" технологию на предмет проблем...

Если кому интересно, то юзать так:
http://vps.my-services.km.ua/api/index. ... format=xml
( commands: noop, time, date; formats: xml, js, json )
Fusion Player — модуль для CMS PHP-Fusion (demo video: посмотреть)

Не использую пиратского ПО
IP-PBX Asterisk українською. Зроби краще!

«ХО» – мое все.
А ты перевел свой домен на DNSSEC?

Slackware userИзображение

baytuch
Сообщения: 925
Зарегистрирован: Сб мар 14, 2009 00:23
Откуда: пгт. Войтовцы
Контактная информация:

Re: Реализация API.

#6 Сообщение baytuch » Чт авг 30, 2012 05:36

Начал по немного изучать фреймфорк wxWidgets. Решил писать клиент ( нужно для дела. Кроме того, можно автоматизировать учет и т.п. ) Это заготовка... Я его ласково называю "Выкидышем" :) Также буду работать в этом направлении... Все, иду отдыхать — неделю по 15 часов в сутки — перебор...

Ребята, перенесите, пожалуйста эту тему в тему по сервер, а то, по ходу, это все про одно...

Linux ( i486, Slackware 12.2 ):
Изображение

Ubuntu Lucid ( i386 ):
Изображение

Windows ( x86, XP SP2, Original ):
Изображение

Source: http://www.my-services.km.ua/files/MSC/MSC_0.1.zip
Последний раз редактировалось baytuch Пн окт 15, 2012 09:14, всего редактировалось 2 раза.
Fusion Player — модуль для CMS PHP-Fusion (demo video: посмотреть)

Не использую пиратского ПО
IP-PBX Asterisk українською. Зроби краще!

«ХО» – мое все.
А ты перевел свой домен на DNSSEC?

Slackware userИзображение

baytuch
Сообщения: 925
Зарегистрирован: Сб мар 14, 2009 00:23
Откуда: пгт. Войтовцы
Контактная информация:

Re: Реализация API.

#7 Сообщение baytuch » Вт сен 04, 2012 15:53

Ребята, скажите, пожалуйста, а протокол HTTP 1.0 является устаревшим? Его можно использовать в новых разработках? Просто, меня возникли некоторые усложнения в последней версией, связанные с фрагментной загрузкой, "лишними" данными в выдаче сервера. Думаю, нужно будет реализовать эту функциональность в дальнейшем...

Наглядно на проблему можно посмотреть на ниже приведенных примерах выдачи хоста моего домашнего проекта или любого сервера в сети Интернет:

HTTP 1.1:

Код: Выделить всё

HTTP/1.1 200 OK
Date: Tue, 04 Sep 2012 12:42:44 GMT
Server: Apache/1.3.33 (Unix) PHP/4.4.0
X-Powered-By: PHP/4.4.0
Connection: close
Transfer-Encoding: chunked
Content-Type: text/xml; charset=utf-8

c0
<?xml version="1.0" encoding="UTF-8"?>
<root>
  <com>
    noop
  </com>
  <status>
    ok
  </status>
  <data>
    <information>
      My_SERVER_API_v_0.1
    </information>
  </data>
</root>

0
HTTP 1.0:

Код: Выделить всё

HTTP/1.1 200 OK
Date: Tue, 04 Sep 2012 12:45:18 GMT
Server: Apache/1.3.33 (Unix) PHP/4.4.0
X-Powered-By: PHP/4.4.0
Connection: close
Content-Type: text/xml; charset=utf-8

<?xml version="1.0" encoding="UTF-8"?>
<root>
  <com>
    noop
  </com>
  <status>
    ok
  </status>
  <data>
    <information>
      My_SERVER_API_v_0.1
    </information>
  </data>
</root>
Корень зла в этой строчке в выдаче: Transfer-Encoding: chunked. Придется писать специЯльный декодер-сборщик...
Fusion Player — модуль для CMS PHP-Fusion (demo video: посмотреть)

Не использую пиратского ПО
IP-PBX Asterisk українською. Зроби краще!

«ХО» – мое все.
А ты перевел свой домен на DNSSEC?

Slackware userИзображение

dobs
HO Moderators
Сообщения: 2504
Зарегистрирован: Вс апр 09, 2006 14:42
Откуда: /home/Ukraine/Kyiv
Контактная информация:

Re: Реализация API.

#8 Сообщение dobs » Вт сен 04, 2012 17:07

:!: Думаю вначале надо определить сколько народу будут юзать сей скрипт и определится а стоит ли геморроится с ним если его заюзает пару человек...

baytuch
Сообщения: 925
Зарегистрирован: Сб мар 14, 2009 00:23
Откуда: пгт. Войтовцы
Контактная информация:

Re: Реализация API.

#9 Сообщение baytuch » Вт сен 04, 2012 23:26

Все, что вы видите — это лишь описание транспорта, общие алгоритмы передачи данных...

Дружище, на данный момент я с домашней машины предоставляю сервис, с использование протокола syncML ( из-за этого был трения в "Киевстаром" — он блочил порты, а юзеры в основном оттуда ведут коннект ) Наши местные не доверяют "левым" сервисам. Корочь, юзерей уже 300 чел... Юзают, как хранилище номеров и т.п. ( закрытый сервис ) Как я уже писал, эта прожка будет для учета, редактирования, заказов... В общем, юзать есть кому... :)
Fusion Player — модуль для CMS PHP-Fusion (demo video: посмотреть)

Не использую пиратского ПО
IP-PBX Asterisk українською. Зроби краще!

«ХО» – мое все.
А ты перевел свой домен на DNSSEC?

Slackware userИзображение

dobs
HO Moderators
Сообщения: 2504
Зарегистрирован: Вс апр 09, 2006 14:42
Откуда: /home/Ukraine/Kyiv
Контактная информация:

Re: Реализация API.

#10 Сообщение dobs » Вт сен 04, 2012 23:57

Мда ну в общем удачи, а по поводу вопроса, то думаю как вариант можно добавить переменную указывающую на версию html или просто версию АПИ...
Зацените как на аптаймроботе сделана своя АПИ без заморочек :)

baytuch
Сообщения: 925
Зарегистрирован: Сб мар 14, 2009 00:23
Откуда: пгт. Войтовцы
Контактная информация:

Re: Реализация API.

#11 Сообщение baytuch » Чт сен 06, 2012 01:30

Спасибо...

Честно говоря, не совсем понял... Вот, к примеру, если делать запросы браузером ( той библиотекой, что часы на ней работают ), то там такой проблемы нет, так как всеми этими делами заправляет браузер... В случае с фреймворком wxWidgets, то он сам по дефолту использует именно версию протокола 1.0. Но, допустим, что мы пишем свой код, который должен работать сам с этим протоколом. Пусть, на PHP... К примеру, вот код "щупальце" моего бота:

Код: Выделить всё

function bot_socket($host, $ip_adress, $bot_query, $bot_ssl){

  $bot_name = "MSBot";
  $buff_string = "";

  if ( $ip_adress == false ){
    $ip_adress = $host;
  };
  if ( $bot_ssl == true ){
    $port_connect = 443;
    $pref_host = "ssl://";
    } else {
    $port_connect = 80;
    $pref_host = "";
  };

  $segm_data[] = "GET /".$bot_query." HTTP/1.0\r\n";
  $segm_data[] = "Host: ".$host."\r\n";
  $segm_data[] = "User-Agent: ".$bot_name."/0.1 ( Linux i486; ru-RU )\r\n";
  $segm_data[] = "Accept-Language: ru-RU, en; q=0.50\r\n";
  $segm_data[] = "Connection: Close\r\n\r\n";

  $fp = fsockopen($pref_host.$ip_adress, $port_connect, $errno, $errstr, 30);
  if ( $fp != false ){
    for ( $i = 0; $i<count($segm_data); $i++ ){
      fwrite($fp, $segm_data[$i]);
    };
    while ( feof($fp) == false ){
      $buff = fgets ( $fp, 8192 );
      $buff_string = $buff_string.$buff;
    };
    fclose($fp);
    } else {
    $buff_string = false;
  };

  return $buff_string;
};
То получим вопрос: какой протокол юзать? Старый без проблем или новый с необходимостью писать декодер... ( вывод я привел )
Собсно, в этом вопрос...

Да, практично... Уже тестил... ;)
Fusion Player — модуль для CMS PHP-Fusion (demo video: посмотреть)

Не использую пиратского ПО
IP-PBX Asterisk українською. Зроби краще!

«ХО» – мое все.
А ты перевел свой домен на DNSSEC?

Slackware userИзображение

dobs
HO Moderators
Сообщения: 2504
Зарегистрирован: Вс апр 09, 2006 14:42
Откуда: /home/Ukraine/Kyiv
Контактная информация:

Re: Реализация API.

#12 Сообщение dobs » Чт сен 06, 2012 09:09

curl надо юзать а не сокеты...

baytuch
Сообщения: 925
Зарегистрирован: Сб мар 14, 2009 00:23
Откуда: пгт. Войтовцы
Контактная информация:

Re: Реализация API.

#13 Сообщение baytuch » Пт сен 07, 2012 03:51

Я пошел на этот шаг осознанно, так как считаю, что fsocketopen более гибкая в использовании… По поводу объема кода – тоже спорно… Понимаете, дружище, меня никто в плечи не гонит и над головой также никого нима… В общем, мне так удобней, особенно, если учесть, что весьма интересуюсь всякими низкоуровневыми штучками… А вы оценили фрагмент кода, где запрос делаем без предварительного ожидания ответа ДНС? Время получения ответа возрастает в два раза. Но, к сожалению, при работе через шлюз ССЛ, скорость несколько уменьшается…

А почему это плохо? Обоснуйте, пожалуйста…
Fusion Player — модуль для CMS PHP-Fusion (demo video: посмотреть)

Не использую пиратского ПО
IP-PBX Asterisk українською. Зроби краще!

«ХО» – мое все.
А ты перевел свой домен на DNSSEC?

Slackware userИзображение

dobs
HO Moderators
Сообщения: 2504
Зарегистрирован: Вс апр 09, 2006 14:42
Откуда: /home/Ukraine/Kyiv
Контактная информация:

Re: Реализация API.

#14 Сообщение dobs » Пт сен 07, 2012 12:27

Функционала у него больше, например многопоточность та и вообще намного удобней в использовании
П.С. Скорость работы не сверял с сокетами, если надо скорость то мож проще Perl юзать...

П.С. Раз Вы так любите мерить скорость то почитайте чем отличается обработка двойной кавычки от одинарной...

baytuch
Сообщения: 925
Зарегистрирован: Сб мар 14, 2009 00:23
Откуда: пгт. Войтовцы
Контактная информация:

Re: Реализация API.

#15 Сообщение baytuch » Пн янв 14, 2013 20:53

Только вот моя памописная либа для организации кросдомменого Ajax'a не хочет работать под IE, а хотелось бы еще иметь возможность писать гаджеты под Win7, а они используют javascript-движок именно штатного браузера ОС. Буду думать, как преодолеть этот рубеж...
Fusion Player — модуль для CMS PHP-Fusion (demo video: посмотреть)

Не использую пиратского ПО
IP-PBX Asterisk українською. Зроби краще!

«ХО» – мое все.
А ты перевел свой домен на DNSSEC?

Slackware userИзображение

Ответить