Страница 1 из 2
Реализация API.
Добавлено: Пт июл 27, 2012 16:47
baytuch
Ребята, добрый день... Уже давно «чашу тыкву» на эту тему. Так, в частности, интересует целесообразность представление ответа сервера в XML-формате... А не проще сделать «построчный» вывод, что уменьшит трафик и упростит парсинг, собсно?.. Хотя, на данный момент склонен использовать именно использовать именно общепринятый метод...
Пример API-интерфейса ( XML ):
юзать
Re: Реализация API.
Добавлено: Пт июл 27, 2012 18:58
dobs
JSON компактней ХМЛ
Re: Реализация API.
Добавлено: Пт авг 17, 2012 17:09
baytuch
Да, согласен... Но, JSON — фишка JavaScript ( ИМХО ). Хотя уже существуют библиотеки под многие языки программирования, фреймоворки... Честно говоря, больше склонен к использованию XML. Большинство сервисов предоставляют API-интерфейс по средством JSON опционально, а вот XML — гарантировано.
Несколько дней парился с возможностью реализации кросс-доменного Аякса. Хочу отметить, что именно тут использование формата "JSON" подходит идеально.
В общем, на данный момент решил делать API сдвоенным — с поддержкой XML и JSON. Что позволит минимизировать/оптимизировать код, когда займусь написанием клиентов... Предполагаются следующие типы подключений: Web ( Ajax ), с использование упомянутой технологии; PHP ( Web server connect ); C++ ( кросплатформенный фреймворк wxWidgets).
*работу метода можно посмотреть на модели:
go
( основано на динамической подгрузке js-файла, сгенерированного серверной частью приложения, где и помещены переменные-ответы. Все просто... )
( На примере не учтен механизм кеширования, но так как js-файл фактически является html-документом ( с тоски зрения сервера и браузера ), то проблем не наблюдается. На деле необходимо править настройки сервера... )
Re: Реализация API.
Добавлено: Сб авг 18, 2012 12:26
baytuch
Хмм... На JavaScript в данном случае как-то напряжно использовать JSON в "чистом" виде ( громоздкая загрузка, нужен парсер ). Даже не знаю... Как по мне, то передавать обычные объекты на много удобнее. Зато XML валидный "на все 100"
.
Выходит как-то так:
Код: Выделить всё
var js_data = {
"com": "noop",
"status": "ok",
"id_session": "1111111111111111",
"data": {
"information": "API v 0.1"
}
}
Re: Реализация API.
Добавлено: Сб авг 18, 2012 21:50
baytuch
Вроде все работает. Немного сегодня посидел и "допилил" код. Теперь модуль генерирует xml, js и json. Команд минимум — пока "прощупываю" технологию на предмет проблем...
Если кому интересно, то юзать так:
http://vps.my-services.km.ua/api/index. ... format=xml
( commands: noop, time, date; formats: xml, js, json )
Re: Реализация API.
Добавлено: Чт авг 30, 2012 05:36
baytuch
Начал по немного изучать фреймфорк 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
Re: Реализация API.
Добавлено: Вт сен 04, 2012 15:53
baytuch
Ребята, скажите, пожалуйста, а протокол 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. Придется писать специЯльный декодер-сборщик...
Re: Реализация API.
Добавлено: Вт сен 04, 2012 17:07
dobs
Думаю вначале надо определить сколько народу будут юзать сей скрипт и определится а стоит ли геморроится с ним если его заюзает пару человек...
Re: Реализация API.
Добавлено: Вт сен 04, 2012 23:26
baytuch
Все, что вы видите — это лишь описание транспорта, общие алгоритмы передачи данных...
Дружище, на данный момент я с домашней машины предоставляю сервис, с использование протокола syncML ( из-за этого был трения в "Киевстаром" — он блочил порты, а юзеры в основном оттуда ведут коннект ) Наши местные не доверяют "левым" сервисам. Корочь, юзерей уже 300 чел... Юзают, как хранилище номеров и т.п. ( закрытый сервис ) Как я уже писал, эта прожка будет для учета, редактирования, заказов... В общем, юзать есть кому...
Re: Реализация API.
Добавлено: Вт сен 04, 2012 23:57
dobs
Мда ну в общем удачи, а по поводу вопроса, то думаю как вариант можно добавить переменную указывающую на версию html или просто версию АПИ...
Зацените как на
аптаймроботе сделана своя АПИ без заморочек
Re: Реализация API.
Добавлено: Чт сен 06, 2012 01:30
baytuch
Спасибо...
Честно говоря, не совсем понял... Вот, к примеру, если делать запросы браузером ( той библиотекой, что часы на ней работают ), то там такой проблемы нет, так как всеми этими делами заправляет браузер... В случае с фреймворком 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;
};
То получим вопрос: какой протокол юзать? Старый без проблем или новый с необходимостью писать декодер... ( вывод я привел )
Собсно, в этом вопрос...
Да, практично... Уже тестил...
Re: Реализация API.
Добавлено: Чт сен 06, 2012 09:09
dobs
curl надо юзать а не сокеты...
Re: Реализация API.
Добавлено: Пт сен 07, 2012 03:51
baytuch
Я пошел на этот шаг осознанно, так как считаю, что fsocketopen более гибкая в использовании… По поводу объема кода – тоже спорно… Понимаете, дружище, меня никто в плечи не гонит и над головой также никого нима… В общем, мне так удобней, особенно, если учесть, что весьма интересуюсь всякими низкоуровневыми штучками… А вы оценили фрагмент кода, где запрос делаем без предварительного ожидания ответа ДНС? Время получения ответа возрастает в два раза. Но, к сожалению, при работе через шлюз ССЛ, скорость несколько уменьшается…
А почему это плохо? Обоснуйте, пожалуйста…
Re: Реализация API.
Добавлено: Пт сен 07, 2012 12:27
dobs
Функционала у него больше, например многопоточность та и вообще намного удобней в использовании
П.С. Скорость работы не сверял с сокетами, если надо скорость то мож проще Perl юзать...
П.С. Раз Вы так любите мерить скорость то почитайте чем отличается обработка двойной кавычки от одинарной...
Re: Реализация API.
Добавлено: Пн янв 14, 2013 20:53
baytuch
Только вот моя памописная либа для организации кросдомменого Ajax'a не хочет работать под IE, а хотелось бы еще иметь возможность писать гаджеты под Win7, а они используют javascript-движок именно штатного браузера ОС. Буду думать, как преодолеть этот рубеж...