API, документация

API проекта "100 фактов обо мне" базируется на XML-RPC-протоколе, что позволяет работать c системой удаленно, из внешних программ, посредством HTTP-запросов и языка разметки XML. Используемая кодировка - UTF-8. Все спецсимволы в строковых значения должны быть экранированы в соотствествии с правилами языка разметки XML.

Клиентские программы отправляют XML-запросы с указанием метода и его параметров. При корректном заполнении необходимых переменных и успешной авторизации метод обрабатывается и возвращает требуемые данные.

Желающие поближе познакомиться с протоколом XML-RPC могут посетить официальный сайт или Википедию.

Пример запроса клиента

Клиент отправляет запрос на удаление своей записи:

POST /xmlrpc HTTP/1.0
Host: 100faktovobomne.ru
Content-Type: text/xml
User-Agent: XML-RPC Client
Content-Length: 529

<?xml version="1.0"?>
<methodCall>
<methodName>DeleteFact</methodName>
<params>
<param>
<value>
<struct>
<member>
<name>id</name>
<value>
<string>64</string>
</value>
</member>
</struct></value>
</param>
<param>
<value>
<struct>
<member>
<name>login</name>
<value>
<string>Семиаминов Вениамин Абрамович</string>
</value>
</member>
</struct></value>
</param>
<param>
<value>
<struct>
<member>
<name>password</name>
<value>
<string>myprivatepassword</string>
</value>
</member>
</struct></value>
</param>
</params>
</methodCall>

При этом вызывается метод DeleteFact и ему передаются параметры id, login, password.

 

Пример ответа сервера

Сервер обработал запрос клиента и возвращает данные или статус операции.

HTTP/1.1 200 OK
Date: Fri, 17 Apr 2009 13:47:24 GMT
Server: Apache/2.2.9
Content-Length: 220
Vary: Accept-Encoding
Connection: close
Content-Type: text/xml

<?xml version="1.0" encoding="UTF-8"?>
<methodResponse>
<params>
<param>
<value>
<struct>
<member>
<name>status</name>
<value>
<string>OK</string>
</value>
</member>
</struct></value>
</param>
</params>
</methodResponse>

"ОК" в данном случае означает, что авторизационные данные верны и ошибок при выполении операции не произошло.

 

Методы

Желающие использовать API могут использовать следующие методы, список которых будет расширяться по мере необходимости для дублирования всего необходимого функционала.

Параметры запроса и возвращаемые объекты будут в структуре, показанной в примерах.

 

SaveFact

Сохранение или добавления факта.

Параметры запроса:

  • login - логин пользователя в системе, строка
  • password - пароль пользователя в системе, строка
  • id - уникальный номер существующего факта (если нужно сохранить, а не добавлять), число
  • title - название факта, строка
  • description - описание факта, строка
  • tags - теги через запятую, строка
  • status - 1, если вы оцениваете факт как отрицательный, 2 - если положительный, 0 - нейтральный, число

Тело запроса будет, к примеру, таким:

<?xml version="1.0"?>
<methodCall>
<methodName>SaveFact</methodName>
<params>
<param>
<value>
<struct>
<member>
<name>title</name>
<value>
<string>Я люблю грызть орехи</string>
</value>
</member>
</struct></value>
</param>
<param>
<value>
<struct>
<member>
<name>tags</name>
<value>
<string>еда, здоровье</string>
</value>
</member>
</struct></value>
</param>
<param>
<value>
<struct>
<member>
<name>description</name>
<value>
<string>Это здорово укрепляет мои зубы.</string>
</value>
</member>
</struct></value>
</param>
<param>
<value>
<struct>
<member>
<name>login</name>
<value>
<string>Семиаминов Вениамин Абрамович</string>
</value>
</member>
</struct></value>
</param>
<param>
<value>
<struct>
<member>
<name>password</name>
<value>
<string>myprivatepassword</string>
</value>
</member>
</struct></value>
</param>
</params>
</methodCall>

 

DeleteFact

Удаление факта.

Параметры запроса:

  • login - логин пользователя в системе, строка
  • password - пароль пользователя в системе, строка
  • id - уникальный номер существующего факта, подлежащего удалению, число

Пример тела запроса на удаление уже был приведен выше.

 

GetFacts

Получение списка фактов.

Параметры запроса:

  • login - логин пользователя в системе, строка
  • password - пароль пользователя в системе, строка
  • id - уникальный номер факта, число
  • tag - название тега, по которому хотите получить записи, строка
  • user - логин пользователя, факты которого хотите получить, строка

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

Пример тела запроса:

<?xml version="1.0"?>
<methodCall>
<methodName>GetFacts</methodName>
<params>
<param>
<value>
<struct>
<member>
<name>id</name>
<value>
<string>15</string>
</value>
</member>
</struct></value>
</param>
<param>
<value>
<struct>
<member>
<name>login</name>
<value>
<string>Семиаминов Вениамин Абрамович</string>
</value>
</member>
</struct></value>
</param>
<param>
<value>
<struct>
<member>
<name>password</name>
<value>
<string>myprivatepassword</string>
</value>
</member>
</struct></value>
</param>
</params>
</methodCall>

Запрашивается факт с номером 15 (уникальный номер в системе). Сервер отвечаются следующим блоком данных:

<?xml version="1.0" encoding="UTF-8"?>
<methodResponse>
<params>
<param>
<value>
<array>
<data>
<value>
<struct>
<member>
<name>id</name>
<value>
<string>15</string>
</value>
</member>
<member>
<name>user</name>
<value>
<string>Семиаминов Вениамин Абрамович</string>
</value>
</member>
<member>
<name>title</name>
<value>
<string>Я люблю грызть орехи</string>
</value>
</member>
<member>
<name>description</name>
<value>
<string>Это здорово укрепляет мои зубы.</string>
</value>
</member>
<member>
<name>date</name>
<value>
<string>2009-03-23 14:51:41</string>
</value>
</member>
<member>
<name>num</name>
<value>
<string>12</string>
</value>
</member>
</struct></value>
</data>
</array>
</value>
</param>
</params>
</methodResponse>