Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > API приложений и сред

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 04.11.2011, 16:01
PainKiller вне форума Посмотреть профиль Отправить личное сообщение для PainKiller Найти все сообщения от PainKiller
  № 1  
Ответить с цитированием
PainKiller
 
Аватар для PainKiller

блогер
Регистрация: Sep 2011
Адрес: Москва
Сообщений: 533
Записей в блоге: 4
Question Универсальная оболочка для работы с API соцсетей

Начал писать свое первое приложение для vkontakte.ru, которое в дальнейшем планируется перенести и на facebook. И, сразу, чтобы избежать лишней работы в будущем, возник вопрос как лучше спроектировать работу с API в приложении. В идеале вся специфика работы с API должна быть инкапсулирована внутри интерфейса одного класса, т.е. коду приложения должно быть без разницы с каким API работать + этот класс можно было бы легко и безболезненно для основного кода расширять, добавляя туда новые API (например google+). Я думаю что я не первый кому пришла в голову эта "гениальная" идея, поэтому и возникли вопросы к опытным в этой сфере людям. Вопросы такие: Вообще в принципе возможно унифицировать все API в один интерфейс, или будут какие то подводные камни? И если возможно, то какой шаблон проектирования для этого лучше использовать? Или может быть это кем то уже реализовано и имеются готовые либы? Заранее спасибо!

Старый 04.11.2011, 16:22
Astraport вне форума Посмотреть профиль Отправить личное сообщение для Astraport Найти все сообщения от Astraport
  № 2  
Ответить с цитированием
Astraport
 
Аватар для Astraport

блогер
Регистрация: Sep 2009
Сообщений: 2,463
Записей в блоге: 2
Поищите в блогах. Было, но по памяти без FB, только для BK+OK+MM.

Старый 04.11.2011, 17:57
PainKiller вне форума Посмотреть профиль Отправить личное сообщение для PainKiller Найти все сообщения от PainKiller
  № 3  
Ответить с цитированием
PainKiller
 
Аватар для PainKiller

блогер
Регистрация: Sep 2011
Адрес: Москва
Сообщений: 533
Записей в блоге: 4
Спасибо поищу

Старый 04.11.2011, 18:45
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 4  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,600
Записей в блоге: 17
Много разно думал-делал, и пришел к выводу, что мне совсем не нравится "общая" для всех идея: писать фреймворк для сериализации и десериализации.
Поэтому как делаю я:
У меня есть коннектор к соц сети: SocialNetwork. У него есть метод send, который принимает в качестве аргумента SocialBaseCommand.
У SocialBaseCommand обязан быть наследник, в котором переопределены методы serialize и execute: первый сериализует команду на сервер, второй её парсит и делает то что надо. При переносе системы на другой проект код во всяком случае десериализации пишется заново. Мультисоциальность того и другого достигается путем условной компиляции.
Пример:
Код AS3:
var command:SocialBaseCommand = _socialNetork.send(new Get(friendUIDs);
command.addEventListener(Event.COMPLETE, onCompleteHandler);
Код AS3:
package social.commands.friends {
	import social.custom.CustomSocialCommand;
 
	public class Get extends CustomSocialCommand {
		private var _uid:String;
 
		public function Get(uid:String = null) {
			super();
			_uid = uid;
			super.commandAPIName = "friends.get";
		}
 
		protected override function serialize():void {
			super.body.uid = _uid;
			super.serialize();
		}
 
		protected override function execute():void {
			super.execute();
		}
 
	}
 
}
Внутри этого примера какие-то действия будут совершенны внутри хэндлера onCompleteHandler, по ответу.
У команды есть публичное поле response, в который кладется ответ.
Парсинг может происходить внутри execute:
Код AS3:
protected override function execute():void {
	if (!Boolean(super.response)) {
		super.baseController.catapulting("Для игры Вам необходимо установить приложение.");
	}
	super.execute();
 
}
Если надо добавить несколько соц. сетей, то сначала парсинг разных форматов через условную компиляцию, потом обращаемся:
Код AS3:
var uids:String;
CONFIG:SOCIAL1 {
uids=super.response.friends;
}
CONFIG::SOCIAL2{
uids=super.response.some_other_field;
}
super.baseModel.getSomeModel().uids=uids;
Сериализацией и десериализацией занимается отдельный класс, который имплементит IApiAdapter. Не совсем адаптер, но мне нравится его так называть.
2 главных метода там:
Код AS3:
function serialize(command:SocialBaseCommand):URLLoader;
function get decoderFunction():Function;
Например вот сериализация от OKAdapter:
Код AS3:
		public function serialize(command:SocialBaseCommand):URLLoader {
			var urlLoader:URLLoader = new URLLoader();
			var vars:URLVariables = signRequest(command.body);
			var commandType:String = command.commandAPIName.split(".").join("/");
			var urlRequest:URLRequest = new URLRequest(FlashVars.OK_SOCIAL_API_URL + commandType);
			urlRequest.data = vars;
			urlLoader.load(urlRequest);
			return urlLoader;
		}

Старый 04.11.2011, 20:34
PainKiller вне форума Посмотреть профиль Отправить личное сообщение для PainKiller Найти все сообщения от PainKiller
  № 5  
Ответить с цитированием
PainKiller
 
Аватар для PainKiller

блогер
Регистрация: Sep 2011
Адрес: Москва
Сообщений: 533
Записей в блоге: 4
Psycho Tiger спасибо, я не настолько хорошо знаю API социальных сетей чтобы оценить предложенное, но в любом случае есть материал для обдумывания

Создать новую тему Ответ Часовой пояс GMT +4, время: 02:09.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 02:09.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.