Pull to refresh

Hivext: Платформа веб сервисов

Reading time10 min
Views1.5K


Hivext


Это платформа веб-сервисов с общим интерфейсом доступа к ним из разных языков программирования. Цель Hivext предоставить полезные разработчикам веб-сервисы, обеспечить их стабильную работу и в тоже время простоту внедрения в проекты. Hivext поможет соединить множество существующих платформ через единый API.

Если вы хотите легко и быстро создавать веб-приложения, включая разработку для мобильных устройств, то платформа очень интересный инструмент.

Предыдущая статья полезна для ознакомления с платформой, ее архитектурой, целями и задачами. В этой статье мы продолжаем публикацию изменений и новых сервисов, добавленных в платформу за последнее время.


Основные изменения

  • Перевод всей документации на wiki систему, с дальнейшей возможностью построения сообщества, обсуждением и добавлением своих наработок на основе сервисов платформы;
  • Разработчику предоставлены базовые сервисы и структуры для начала разработки под платформу (работа с пользователями, регистрация, аутентификация, управление приложениями и структурами данных);
  • Решено дать возможность разработчику самому расширять платформу на основе базовых сервисов и соответственно использовать эти наработки в проектах и открывать наработки для других разработчиков;
  • Добавлена консоль для тестов сервисов: http://code.hivext.ru/development/APIConsole/

Базовые сервисы


Регистрация

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

Документация сервиса регистрации

Идентификация и аутентификация

Аутентификация зарегистрированных пользователей. Особенности сервиса:
  • Все пользователи имеют уникальный идентификатор user identificator (UID);
  • Единая база позволяет пользователям зарегистрированным в системе заходить во все приложения использующие сервис аутентификации;
  • После аутентификации создается длинная защищенная сессия. Идентификатор сессии используется для вызовов сессионных методов других сервисов;
  • Идентифицированному пользователю не требуется повторно вводить свои данные, если он уже был аутентифицирован. Причем если пользователь произвел аутентификацию на домене app1.com, то при заходе на домен app2.com система будет знать что пользователь уже аутентифицирован. Данный подход принято называть Single Sign On.
Документация сервиса Идентификации и аутентификации

Управление аккаунтом

Сервис управления персональными данными пользователя. Определен необходимый набор методов:
  • Редактирование имени пользователя;
  • Редактирование почтового адреса пользователя;
  • Редактирование пароля пользователя.
Документация сервиса Аккаунта

Управление приложениями

Чтобы начать разрабатывать приложения под платформу разработчику необходимо:
  • Зарегистрироваться в системе (сервис Регистрации)
  • Аутентифицироваться в системе (сервис Идентификации и аутентификации)
  • Получить идентификатор приложения (сервис Управления приложениями)
Все методы сервисов вызываются зная идентификатор приложения. Без идентификатора приложения вызов методов сервисов навозможен. Идентификатор приложения можно привязать к домену, IP адресу или альясу (домены и/или IP адреса). Т.е. использование конкретного ключа на других доменах/IP блокируется.

Документация сервиса Приложений

В разработке сервис структур. Именно данный сервис позволит расширять существующую структуру платформы под нужды своих проектов.

Пример использования сервисов


API Консоль — веб-приложение функционирующее на основе базовых сервисов.

Пример использования сервиса аутентификации


Пример сделан на JavaScript и реализует функции: аутентификации, завершения сеанса и идентификации пользователя.

Шаг 1: Изучаем документацию и выбираем нужные функции

Документация сервиса Идентификации и аутентификации

Выбираем нужные методы. Нам нужны методы: Signin, Signout, CheckSign.
Смотрим есть ли готовые клиенты для данного сервиса. Нам нужен клиент для JavaScript.

Если для сервиса клиента нет (под необходимый язык) то в методе есть достаточно информации для его вызова. Например, для метода Signin нужно сделать HTTP GET запрос, параметры кодируются в urlEncoding. Пример запроса:
http://api.hivext.ru/1.0/users/authentication/rest/signin?appid=1dd8d191d38fff45e62564fcf67fdcd6&email=email@email.com&password=12345678

Шаг 2: Подключаем клиент сервиса

<script src="http://code.hivext.ru/frameworks/js/core.js" type="text/javascript"></script>
<script src="http://api.hivext.ru/1.0/users/authentication.js" type="text/javascript"></script>


Шаг 3: Создаем нужный каркас приложения

<style> <br> <br>body {<br>    font-family: "Lucida Grande", Tahoma, Verdana, Arial, Sans-Serif;<br>    font-size: 10pt;<br>    color:#333;<br>}<br> <br>.error {<br>    border: 1px solid #ff5050;<br>    background-color: #ffc5b5;<br>    padding: 4px 10px;<br>    margin-bottom: 6px;<br>    display: none;<br>    font-size: 8pt;<br>    font-weight: bold;<br>}<br><br></style> <br><br><body onload="Load()"> <br><br><div id="error" class="error"></div> <br> <br><div id="signin_block" style="display: none"> <br>Электронная почта:  <input id="email" />  <br>Пароль:  <input id="password" type="password" />  <br><input id="signin" value="Sign In" type="button" /> <br></div> <br> <br><div id="signout_block" style="display: none"> <br><div id="welcome_message" /> <br><input id="signout" value="Sign Out" type="button" /> <br></div> <br> <br></body><br><br>* This source code was highlighted with Source Code Highlighter.

Шаг 4: Устанавливаем обработчики событий и реализуем необходимую логику

//<br>// Устанавливаем обработчик события onload на элемент body.<br>//<br><br>function Load() {<br><br>    function id(element) { return document.getElementById(element); }<br>    function error(result, error) { return "Code: " + result + "<br />Error: " + error;}<br><br>    var sAppId = "0123456789ABCDEF0123456789ABCDEF"; // Идентификатор приложения.<br>    var sSession; // Здесь будем хранить идентификатор сессии после успешной аутентификации.<br><br>    // Если сессия была сохранена, достанем ее из cookies (используется для обхода ограничения 3rd party cookies)<br>    sSession = Cookies.Set("session");<br><br>    // Устанавливаем обработчик события на кнопку аутентификации (Sign In).<br>    id("signin").onclick = function() {<br><br>        // Проверяем ввел ли пользователь почтовый адрес и пароль.<br>        if(!id("email").value || !id("password").value) {        <br>            id("error").innerHTML = "Введите электронную почту и пароль.";<br>            id("error").style.display = "block";<br>            return false;<br>        }<br><br>        //<br>        // Вызываем метод аутентификации и передаем в него значения которые ввел пользователь.<br>        //<br><br>        Users.Authentication.Signin(sAppId, id("email").value, id("password").value, function(oResponse) {<br>            if(oResponse.result === 0) {<br>                // Если ошибок нет, то убираем поля для ввода почты и пароля и показываем кнопку Sign Out (завершение сеанса пользователя).<br>                id("error").style.display = "none";<br>                id("signin_block").style.display = "none";<br>                id("signout_block").style.display = "block";<br><br>                // Сохраняем идентификатор сессии. Он необходим для дальнейшего вызова сессионных методов.<br>                sSession = oResponse.session;<br><br>                // Можно сохранить сессию в куках (в некоторых браузерах по умолчанию запрещена установка cookies - 3rd party cookies).<br>                Cookies.Set("session", sSession);<br><br>            } else {<br>                // Аутентификация произошла с ошибкой, покажем ее.<br>                id("error").innerHTML = error(oResponse.result, oResponse.error);<br>                id("error").style.display = "block";<br>            }<br>        });<br><br>        return true;<br>    }<br><br>    // Устанавливаем обработчик события на кнопку завершения сеанса пользователя (Sign Out).<br>    id("signout").onclick = function() {<br><br>            //<br>            // Вызываем метод завершения сеанса пользователя.<br>            //<br><br>        Users.Authentication.Signout(sAppId, sSession, function(oResponse) {<br>            if(oResponse.result === 0) {<br>                // Если все прошло без ошибко показываем поля для ввода почты и пароля и прячем другие элементы.<br>                id("error").style.display = "none";<br>                id("signin_block").style.display = "block";<br>                id("signout_block").style.display = "none";<br>                        <br>                // Можно очистить куки, если использовались.<br>                Cookies.Clear("session");<br>            } else {<br>                id("error").innerHTML = error(oResponse.result, oResponse.error);<br>                id("error").style.display = "block";<br>            }<br>        });<br>    }<br><br>    //<br>    // Проверяем был ли пользователь уже аутентифицирован.<br>    // <br><br>    Users.Authentication.CheckSign(sAppId, sSession, function(oResponse) {<br>        if(oResponse.result === 0) {<br>            // Пользователь был аутентифицирован, поэтому не показываем ему поля для ввода логина и пароля, а показываем кнопку завершения сеанса.<br>            id("signin_block").style.display = "none";<br>            id("signout_block").style.display = "block";<br>        } else {<br>            // Пользователь не был аутентифицирован, предложим ему ввести почту и пароль.<br>            id("signin_block").style.display = "block";<br>            id("signout_block").style.display = "none";<br>        }<br>    });<br>}<br><br>* This source code was highlighted with Source Code Highlighter.

А вот и рассмотренный пример аутентификации: http://code.hivext.ru/examples/js/common/sign.html
Логин: guest@guest.com, Пароль: guest

Приложения


Документация платформы: doc.hivext.ru
Приложения и компоненты: hivext.ru/index.php/Компоненты
В доступ выложены исходные коды примеров под лицензией LGPL3.

Разработчики


Александров К. М. m007, Руслан Синицкий sirus

Upd: Если интересна данная тема, но еще не до конца понятна суть, то мы сделаем отдельную статью с парой схем и описанием работы.
Tags:
Hubs:
Total votes 21: ↑18 and ↓3+15
Comments27

Articles