Содержание


Доступ к Web-сайтам социальных сетей по протоколу OAuth

Часть 3. Развертывание клиентского Web-приложения для Twitter в среде Google App Engine

Comments

Серия контента:

Этот контент является частью # из серии # статей: Доступ к Web-сайтам социальных сетей по протоколу OAuth

Следите за выходом новых статей этой серии.

Этот контент является частью серии:Доступ к Web-сайтам социальных сетей по протоколу OAuth

Следите за выходом новых статей этой серии.

OAuth предоставляет сайту потребителя более корректный способ обращения к защищенным пользовательским ресурсам, хранящимся у поставщика сервисов. Благодаря OAuth информация о полномочиях никогда не предоставляется сайтам, отличным от того, на котором они первоначально хранятся. Используя настольное клиентское приложение для Twitter в первой части данной серии статей, вы можете обновлять свой статус в Twitter после получения приложением MyTtDesktopClient доступа к данным, хранящимся в Twitter. Использовать приложение снова будет еще удобнее, поскольку маркер доступа можно использовать повторно. Во второй части данной серии статей было продемонстрировано, как разработать Web-клиент для Twitter, позволяющий пользователям выполнять аутентификацию на Twitter по протоколу OAuth и обновлять свой статус. Он также отображает ленты сообщений (timeline) от друзей.

В данной статье вы узнаете, как сделать Web-приложение, работающее в реальной среде. Мы выполним перенос Twitter-клиента, разработанного во второй части, в среду Google App Engine (GAE). Просто развернуть WAR-файл недостаточно; для работы в среде GAE нужно выполнить некоторые изменения. Самым простым способом работы с GAE является использование плагинаGoogle Plugin для Eclipse, который поддерживает разработку для GAE и Google Web Toolkit (GWT).

Исходный код примера, используемого в данной статье, можно загрузить.

Google App Engine

Среда GAE, предоставляемая Google, позволяет Web-приложениям работать в инфраструктуре Google. Большим преимуществом GAE является то, что приложения можно легко масштабировать по мере роста требований к трафику и объему хранимых данных. Можно сконцентрироваться на разработке программного обеспечения, не беспокоясь об обслуживании Web-сервера и сервера базы данных. Если ваши приложения, развернутые в среде GAE, потребляют приемлемый объем трафика, эту среду можно использовать бесплатно. По мере роста количества пользователей вашего сайта можно приобрести у Google больше процессорного времени и места под хранение данных. На момент написания данной статьи в GAE поддерживался код, написанный на Python и Java™.

Регистрация Web-приложения в Google

Все GAE-приложения необходимо регистрировать в Google:

  1. Если у вас еще нет учетной записи в Google, создайте ее.
  2. Перейдите на страницу Google App Engine и зарегистрируйтесь.
  3. Нажмите кнопку Create an Application (создать приложение). Отобразится запрос страны проживания и номера мобильного телефона.

    Google отправит код верификации на ваш мобильный телефон.

  4. После верификации можно зарегистрироваться в GAE и нажать кнопку Create an Application для создания Web-приложения.

Например, я предоставил следующую информацию при регистрации своего приложения:

  • Application Identifier (идентификатор приложения): dr-yang-tt.appspot.com.

    Выберите свой собственный уникальный идентификатор.

  • Application Title (название приложения): DR YANG's Twitter Client.
  • Authentication Options (параметры аутентификации): перейдите по ссылке Edit, выберите Restricted to the following Google Apps domain (ограничено для следующего домена Google Apps) и оставьте поле пустым.

    По умолчанию ваш сайт открыт для всех пользователей, имеющих учетную запись Google, но указанная выше настройка разрешает любому человеку (как имеющему учетную запись Google, так и не имеющему ее) обращаться к вашему сайту.

Регистрация Web-приложения в Twitter

Если вы работали с первыми двумя частями данной серии статей, можете либо зарегистрировать в Twitter новое приложение, либо изменить ранее созданное и зарегистрированное. Пример приложения был зарегистрирован как новое приложение по адресу http://twitter.com/oauth_clients следующим образом:

  • Application Name (имя приложения): Dr Yang's Tt Web Client.
  • Description (описание): Web-клиент для Twitter, работающий в среде Google app engine.
  • Application Web site (Web-сайт приложения): http://dr-yang-tt.appspot.com/twitterwebclient.
  • Application Type (тип приложения): Browser.
  • Callback URL (URL обратного вызова): http://dr-yang-tt.appspot.com/twitterwebclient.

    Укажите корректный URL обратного вызова; не нужно использовать функцию настройки URL обратного вызова, описанную во второй части серии статей (EN).

  • Default Access type (тип доступа по умолчанию): Read & Write.

    Предоставьте пользователям права для чтения и записи.

  • Use Twitter for login (использовать Twitter для регистрации): No.

После успешной регистрации приложения вы получите ключ потребителя (consumer key), секретную информацию (consumer secret) и три URL (URL маркера запроса (request token), URL маркера доступа (access token) и URL авторизации). Ключ потребителя и секретная информация указываются в файле WEB-INF/web.xml.

Разработка и тестирование Twitter-клиента в GAE

Как уже упоминалось, в примере используется плагин Google Plugin for Eclipse. На момент написания данной статьи поддерживаются три версии Eclipse: 3.5 (Galileo), 3.4 (Ganymede) и 3.3 (Europa). Пример разрабатывался на машине с Eclipse 3.5, поэтому устанавливался плагин Google Plugin for Eclipse 3.5. Предполагается, что вы установили плагин полностью вместе с поддержкой разработки GAE и GWT. После установки прочтите вводное руководство и узнайте, как разработать Web-приложение "Hello World" и развернуть его в среде GAE. (Пошаговые инструкции выходят за рамки данной статьи.)

После создания приложения Web Application Project в Eclipse у вас появится несколько шаблонов, созданных Google Plugin. Их можно использовать в качестве базового проекта для добавления собственного кода. На рисунке 1 показаны файлы проекта TwitterWebClient1. Описание файлов приводится после рисунка 1.

При создании проекта поддержка GWT не выбиралась. Возможно, вы захотите разрешить GWT, если знакомы с этой технологией. GWT позволяет разрабатывать Ajax-приложения, используя стиль программирования Java Swing.

Рисунок 1. GAE-проект TwitterWebClient1 в Eclipse
Рисунок 1. GAE-проект TwitterWebClient1 в Eclipse
Рисунок 1. GAE-проект TwitterWebClient1 в Eclipse
src/logging.properties
Конфигурационный файл регистрации событий Java. Возможно, его будет легче использовать, чем Log4J в GAE.
src/dryang/twitterwebclient/IdAndAccessToken.java
Класс данных логического объекта (entity data) для Java Persistence API (JPA).
src/dryang/twitterwebclient/JpaUtil.java
Вспомогательный класс JPA.
src/dryang/twitterwebclient/TwitterStatus.java
Класс, представляющий Twitter-ленту новостей.
src/dryang/twitterwebclient/TwitterWebClientServlet.java
Базовый контроллер приложения, отвечает за аутентификацию OAuth и пользовательские взаимодействия.
src/META-INF/jdoconfig.xml
Конфигурационный файл Java Data Object (JDO). В данном примере не используется.
war/error.jsp
JSP-страница для обработки исключительных ситуаций.
war/Gnome-Edit-Delete-32.png
Пиктограмма удаления.
war/index.html
Страница приветствия, автоматически направляющая браузер пользователя в наш Twitter-клиент.
war/login_twitter.html
Страница регистрации.
war/twitter_button_5_hi.gif
Изображение кнопки Sign-in.
war/update_twitter_status.jsp
JSP-страница для отображения пользовательской информации на Twitter.
war/WEB-INF/appengine-web.xml
Конфигурационный файл Web GAE.
war/WEB-INF/web.xml
Стандартный конфигурационный файл Web.

Перед компилированием и развертыванием исходного кода в GAE:

  1. Не забудьте указать ваш собственный ключ потребителя и секретную информацию в файле web.xml.
  2. Необходимо также поместить twitter4j-2.0.9.jar в каталог war/WEB-INF/lib.

    Twitter4J – это Java-библиотека с открытыми исходными кодами для TwitterAPI (см. раздел Ресурсы).

  3. Добавьте JAR-файл вручную в путь компоновки (build path) вашего проекта.

Базовая часть кода, сервлет TwitterWebClient, очень похож на MyTwitterServlet, представленный во второй части данной серии статей. Однако имеется несколько отличий, а именно:

  • Была принята система регистрации событий Java, поскольку нелегко заставить работать Log4J с GAE.
  • Объект Twitter больше не сохраняется в HTTP-сессии из-за проблем сериализации. Возможно, вам известно, что GAE является динамической кластерной средой. Все, что сохраняется в HTTP-сессии должно реализовывать интерфейс java.io.Serializable, как делает класс TwitterStatus в примере. Для решения этой проблемы пример сохраняет маркер доступа в сессии, из которого объект Twitter может создаваться и аутентифицироваться.
  • Пользовательский маркер доступа больше не сохраняется в обычном текстовом файле (plain text), а сохраняется в хранилище данных GAE, которое отличается от традиционных баз данных. К счастью, оно поддерживает и JDO, и JPA. В примере используется JPA. Инструкции приведены в документации Google Использование JPA с App Engine.

    В общем случае выполняйте конфигурирование JPA в persistence.xml. Создайте классы данных и вспомогательные классы для получения экземпляра EntityManager. В данном Web-приложении классом данных является dryang.twitterwebclient.IdAndAccessToken, который имеет три поля: id, token и tokenSecret (см. листинг 1). Возможно, вы заметили префикс "$" в Twitter ID пользователя в методах storeAccessToken(...) и loadAccessToken(...) сервлета TwitterWebClient. Он используется потому, что идентификатор указывается как java.lang.String, в то время как Twitter ID является целым числом (integer). Хранилище данных GAE не принимает такой идентификатор как строку.

Листинг 1. Класс данных JPA dryang.twitterwebclient.IdAndAccessToken
@Entity
public class IdAndAccessToken {
	@Id
	private String id;
	private String token;
	private String tokenSecret;

	public IdAndAccessToken() {
	}

	public IdAndAccessToken(String id, String token, String tokenSecret) {
		this.id = id;
		this.token = token;
		this.tokenSecret = tokenSecret;
	}

	// Getters and setters
	......
}

После завершения разработки:

  1. Щелкните правой кнопкой мыши на проекте в Eclipse и выберите Google --> App Engine Settings....

    Должно отобразиться всплывающее окно, похожее на изображенное на рисунке 2.

  2. Укажите корректный идентификатор приложения (в данном примере это dr-yang-tt).
  3. Снова щелкните правой кнопкой мыши на проекте в Eclipse и выберите Google --> Deploy to App Engine.

Спустя некоторое время ваше приложение должно успешно развернуться в GAE.

Рисунок 2. Настройки GAE в Eclipse
Рисунок 2. Настройки GAE в Eclipse
Рисунок 2. Настройки GAE в Eclipse

GAE предоставляет интерфейс управления. Зарегистрируйтесь в этом интерфейсе, используя данные своей учетной записи Google; должен отобразиться список ваших приложений. На рисунке 3 показан пример для приложения dr-yang-tt. Вы обнаружите, что ссылка Logs является очень полезным средством для отладки приложений.

Помните об ограничении, накладываемом Twitter на API-вызовы. После ввода приложения в эксплуатацию вам может понадобиться более частое обращение к Twitter. И по мере привлечения большего количества пользователей на сайт может понадобиться приобрести у Google больше процессорного времени и места для хранения данных.

Рисунок 3. Интерфейс управления GAE для dr-yang-tt
Рисунок 3. Интерфейс управления GAE для dr-yang-tt
Рисунок 3. Интерфейс управления GAE для dr-yang-tt

На рисунке 4 показано приложение, выполняющееся в GAE.

Рисунок 4. Twitter-клиент, использующий OAuth, в среде GAE
Рисунок 4. Twitter-клиент, использующий OAuth, в среде GAE
Рисунок 4. Twitter-клиент, использующий OAuth, в среде GAE

Резюме

В данной серии статей вы узнали о протоколе OAuth и разработали настольное клиентское приложение для Twitter. Затем вы разработали Web-клиент для Twitter, продемонстрировавший прозрачную работу OAuth с Web-браузерами. В этой последней статье серии рассматривалось развертывание Web-клиента для Twitter в среде Google App Engine. Теперь вы можете использовать OAuth для доступа к сайтам социальных сетей. Благодаря OAuth информация о полномочиях пользователя не раскрывается при предоставлении защищенных ресурсов другим Web-сайтам.


Ресурсы для скачивания


Похожие темы


Комментарии

Войдите или зарегистрируйтесь для того чтобы оставлять комментарии или подписаться на них.

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=Web-архитектура, SOA и web-сервисы, Технология Java
ArticleID=778913
ArticleTitle=Доступ к Web-сайтам социальных сетей по протоколу OAuth: Часть 3. Развертывание клиентского Web-приложения для Twitter в среде Google App Engine
publish-date=12062011