Перед тим як розглядати способи взаємодії з будь-якою системою, потрібно представляти, як вона влаштована зсередини. В якості операційної системи творці Facebook обрали Linux, основна частина коду написана на PHP (який засобами HipHop компілюється в c ++). База даних MySQL використовується як сховище пар ключ-значення, ніяких складних структур і join запитів. Для кешування застосовується memcached.
Для уявлення масштабів системи слід звернути увагу на наступну статистику:
Всі об'єкти в графі можуть бути пов'язані між собою відносинами, перевірити наявність зв'язку з цим можна в такий спосіб:
Основні об'єкти Facebook:
Над усіма описаними вище об'єктами дозволені певні операції. Основна операція - отримати об'єкт, тому розглянемо деякі можливості API, які зроблять це більш зручним:
Selection - дозволяє точно вказати, які поля об'єкта повертати:
Також є можливість запитувати декілька об'єктів одночасно:
Для зручності введений спеціальний ідентифікатор - me:
Існує універсальний спосіб показати картинку будь-якого об'єкта:
Природно, цей підхід працює і з профілями, подіями, групами та ін. Об'єктами графа. Додатковий синтаксичний цукор в можливих параметрах: square (50x50), small (50 пікселів в ширину, висота підбирається автоматично), large (200 пікселів в ширину, висота варіюється). Приклад запиту:
Природно, що інформації більше, ніж ми можемо прийняти за один запит, тому розглянемо механізм посторінкового отримання даних:
Існує можливість задати формат повертається дати:
Закінчити короткий огляд graph API слід на найцікавішою можливості - Real-Time updates. Наявність цього пункту показує всю серйозність, з якою Facebook відноситься до інтеграції з іншими додатками. Оновлення в режимі реального часу дозволяють розробникам сторонніх сайтів отримувати інформацію про деякі зміни їх користувачів. Facebook сам повідомляє про те, що користувач написав повідомлення в новинну стрічку, додав одного або натиснув кнопку like. Цей пункт розробників від необхідності періодично опитувати API про такі зміни. Деякі деталі цього механізму:
- Real-time - це може бути кілька хвилин;
- він поширюється тільки на об'єкти user, permissions, page (для додатків);
- вимагає підписки, підтримки особливого механізму взаімодейстівія;
- приймати сторонній сайт повинен як GET (для перевірки підписки) так і POST (для даних) запити.
Зберігаються підписки в такому вигляді:
Механізм взаємодії Faceook і підписаного на поновлення стороннього сайту:
- Спочатку facebook відправляє GET запит на сервер сайту з трьома параметрами: hub.mode (тут буде передана рядок subscribe), hub.challenge (довільна рядок) і hub.verify_token (токен сайту, який був відправлений на Facebook в запиті на підписку).
- Спочатку сайт повинен перевірити, що посланий і прийнятий token збігаються.
- Потім відіслати довільну рядок назад (цей крок дозволяє уникнути випадку, коли Facebook може бути використаний для DDoS атаки на сервер сайту).
- Тільки після вищеописаних кроків, facebook надсилає сайту POST запитом ідентифікатор об'єкта, і список полів, які змінені.
Нові дані доведеться отримувати окремим запитом.
Для аутентифікації Facebook використовує протокол OAuth 2.0, суть якого в трьох кроках:
Після проходження цих трьох кроків сайт отримує "user access token", який дозволяє робити з даними користувача все, що він дозволив.
Аутентифікація, серверна сторона:
Якщо аутентифікація успішно завершена, сайт нарешті отримує accesstoken, разом з яким передається ще один параметр - expires, час у секундах, яке цей token буде працювати.
Є можливість запросити дозвіл на offline_access, тоді token буде діяти вічно.
Виконуються схожі дії, підсумками яких стане
Розроблені Facebook модулі легко вбудовуються в сторонній сайт, вони дозволяють інтегрувати всі найпоширеніші функції:
В даному розділі буде розглянуто основний інструментарій, який можна використовувати для розробки під facebook api.
Дозволяє парсити fbml теги з DOM'а
Додатковий APIs - FQL, Old REST API
Також є "вбудовані функції" now (), strlen (), substr () і strpos ().
Або більш складний - витягаємо інформацію про друзів
Версія для друку