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



    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: Если интересна данная тема, но еще не до конца понятна суть, то мы сделаем отдельную статью с парой схем и описанием работы.
    Ads
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More

    Comments 27

      +1
      Не нашел у вас в документации как же это примерно работает, как выглядит, что нужно для того, чтобы использовать платформу и самое главное, зачем это нужно?

      «Платформа веб-сервисов с общим интерфейсом» — слишком уж абстарктное определение, имхо.
        +2
        Это вторая статья, но мы дали ссылку на первую статью где попытались изложить для чего это все нужно. Нет смысла дублировать содержание первой статьи в последующей.

        На самом деле все очень просто, достаточно разобраться с одним сервисом, подключить (написать клиент к нему если его нет), поработать с ним и все. Работа с остальными сервисами будет такая же.

        Можно провести параллели с Win API, которая дает набор функций, а разработчик уже сам решает как их использовать в своих приложениях. Но у нас набор функций формируется с уклоном разработки под web, со своими ньюансами, плюсами и минусами.
        • UFO just landed and posted this here
            +2
            Логика приложения может находиться и на стороне сервера, все что нужно для обращения к методам это только возможность осуществления HTTP запросов и передача параметров.

            С платформой можно сделать всю логику на своем сервере или всю логику на клиенте или комбинировать часть логики на сервере, часть на клиенте.
            • UFO just landed and posted this here
                +1
                Вот прям серьезно пытаюсь понять и разобраться, но никак не получается.

                > «С платформой можно сделать всю логику на своем сервере или всю логику на клиенте или комбинировать часть логики на сервере, часть на клиенте.»
                Под платформой имеется в виду платформа Hivext, верно? Ну в таком случае, а без платформы нельзя всего этого сделать?
                  +1
                  Можно и без компиляторов писать программы в машинном коде, можно не использовать API операционных систем и начинать сразу с низкого уровня разработку приложения. Но зачем это делать, нужно двигаться вперед использовать инструменты высокого уровня. Это и есть развитие. Ну и разве это плохо когда дается еще один инструмент, мы стараемся сделать его качественным потому что любим свое дело.
                    +1
                    Ну это то уж я понимаю. Прекрасно понимаю все предпосылки возникновения уровней абстракции. Разумеется, мне понятно, зачем API и почему изобрели веб-сервисы и DSL-языки.

                    Я хочу акцентировать вот на чем — не понятно, каким слоем абстракции является Hivext. Т.е. не вполне ясно, какое именно это развитие. Что мне мешает вместо Hivext писать веб-сервисы, допустим, на ASP.NET, который априори поддерживает все их фичи, использовать MVC-фреймворки для REST-сервисов, а в качестве клиента также использовать «все-что-мне-заблагорассудится» (в случае с JS, например, jQuery и любую хорошую UI-библиотеку к нему)?
                    Как видите, вопрос вполне резонный, ибо здесь нет ничего близкого к идее написания веб-проектов на машинном коде.
                      0
                      так пишите, если у вас есть знания, время, деньги — повторяйте, переносите. А почему многие не пишут свои сервисы карт?
                        0
                        Хм… ну на самом деле когда были «лишние деньги», мы реализовывали как раз нечто аналогичное. А потом просто поняли, что по крайней мере на нашей платформе (.NET) все-все-все уровни абстракции веб-сервисов, кроме непосредственно прикладного (предметной области специфичного проекта) уже реализованы производителем технологии и остается только пользоваться. Там и WebServices, и WCF, и Data Services и все это на том уровне, на котором никакого энтузиазма просто не хватило бы сделать. При этом мы тоже были полны энтузиазма и делали свой велосипед.
                        Вот поэтому просто и хотелось бы узнать, действительно ли Hivext — это не просто еще один фреймворк-велосипед, а что-то новое.

                        P.S. Сервис карт — это конкретный прикладной сервис (набор сервисов), а не платформа или язык для сервиса. И логично, в соответствии с принципами SOA его юзать, чем писать свое.
                        Но сравнение для меня неверно, ибо, повторюсь, на примере .NET-платформы есть уже ВСЕ уровни абстракции, кроме непосредственной реализации конкретного сервиса.
                          0
                          И да, еще. Не пойму, где здесь повторение на примере ASP.NET WebServices. Все механизмы уже есть и для отдельных сервисов настройки пишутся в файлике настроек.
                          Помимо прочего, веб-сервисы не такая вещь, которая пишется за 5 минут по 100 штук в день, что настолько уж критично время их настройки и перенастройки.

                          Единственным аргументом вижу слово «знания» — но с другой же стороны — может тем, кто не понимает, что такое веб-сервисы, лучше их и не трогать?
                            0
                            вы зацепились за слово «создавать» веб-сервисы. мы же делаем акцент на слово «предоставлять» веб-сервисы.
                              0
                              Да, я уж понял, что здесь явно что-то нечисто :)
                              Я лучше завтра еще раз все это рассмотрю на свежую голову.
                              +2
                              Хайвекс корректнее сравнивать не с асп.нет, а с азурусом, т.е. платформа, думаю разработчикам хайвекса никто не мешает использовать асп.нет )))
                            +1
                            В своей работе вы все равно используете сторонние библиотеки, по сути это эклектика, проекты собираются из множества разных модулей. Очень редко когда создаются уникальные алгоритмы по обработке данных (в большинстве своем они все примитивны) все сводится управлению данными, созданию структур, чтению, записи. Есть структурные единицы и есть алгоритмы обработки данных, которые работают со структурированными данными. Цель платформы абстрагировать описание структурных единиц от языка программирования (или даже платформы) и абстрагироваться от языка на котором реализован алгоритм обработки данных. Для работы со структурными единицами делаем сервис структур. Для работы с алгоритмами обработки данных нужно реализовывать сервис исполнения кода на серверах (по сути облако).

                            Пойдем от простого к сложному сначала это будут базовые сервисы (сервисы которые используются в 90% веб-приложений), потом сервисы проектирования произвольных структур данных, и далее сервисы добавления своих алгоритмов обработки данных.
                            0
                            да, можно сказать что веб-сервисы — это следующий уровень программирования. Т.е. ЯП развивались грубо говоря примерно так: Assembler -> C -> C#. Мы продолжаем цепочку Assembler -> C -> C# -> WebServices (Hivext). Веб сервисы придумали не мы, мы их просто реализовываем видя в них большой потенциал и будущее.
                              0
                              Так вы реализовываете типовые веб-сервисы или веб-сервис-framework (а ля ASP.NET WebServices)?
                                +1
                                нет, не веб-сервис-framework, да типовые сервисы (в дальнейшем не только типовые).
                  +2
                  Только сейчас обратил внимание и на первую статью.
                  И, честно — не понял, какую нишу пытается занять продукт. Я не говорю, что что-то плохо или хорошо. Правда, просто не понял. Общее впечатление — фрэймворк, с готовыми типовыми «кусочками функциональности» для 90% веб-проектов.

                  В свое время мы пытались создать что-то похожее (точнее, похожее на то, как я это понял), пока не поняли, что это не нужно, по крайней мере для нашей платформы (мы использовали .NET, который сам по себе является таким фрэймворком).

                  Судя по здоровому энтузиазму создателей, у проекта Hivext есть определенное будущее, но вот хотелось бы понять какое именно оно может быть, кроме «Yet Another Web Framework».
                    0
                    в последнее время я часто использую такие вещи как GoogleMap, GoogleVisualzation. Пусть Hivext и не сравнима с ними по функционалу, но зато легко привести пример чтобы стало понятнее что и зачем. Вы представляете как устроена ГИС (GoogleMap)? на бекенде стоит мощный сервер и наверно не один, на котором развернут сервер карт, который в свою очередь дергает БД с разными слоями, картами. все это довольно сложно устроенно. Вы работали когда-то с GooogleMap? Правда приятно и удобно работать? в тоже время вы не заботитесь о серверной стороне, о картах. Вот и Hivext забирает на себя сложность реализации и поддержки серверной части, в коплект которой входят транзакции, кеширование, прочее.
                      0
                      Не вполне понятно. Конечно, я как пользователь не забочусь о GoogleMaps-серверах. Мне вообще все равно как это работает. Главное — работает и я вижу карты. Но вот разработчику GoogleMaps'а так или иначе необходимо знать и понимать, как там все устроено.

                      В этом смысле, Hivext «забирает на себя сложность реализации и поддержки серверной части» у кого??? Если проект, который нужно построить на веб-сервисах, предполагает, что мне нужны сервисы с собственной специфичной логикой, тогда чем мне здесь поможет Hivext?
                        0
                        вы близки к пониманию. правильно если вам нужны сервисы с собственной специфической логикой вы их сами и делате. Т.е. вы не паритесь про то что вам надо опять создавать логику входа/выхода, профайл, проверку данных, синхронизацию, прочее… т.е. то, что переходит и проекта в проект, зачем вам постоянно об этом заботится.

                        Если суть вашего проекта уникальный сервис, так вам надо максимально сконцентрироваться на разработке вашей изюминки. Hivext как раз поможет в этом. Если бы был такой сервис раньше, скорость разработки одного из моих проектов уменьшилась бы в 2-месяцев до 2-х недель. Потому как 70% времени было потрачено на стандартные операции с юзерами, хранением объектов, прочее. Это один из частных примеров.

                        Но опять же — даже уникальные ваши сервисы можно сделать на основе Hivext сервисов. Когда появится сервис структур вы сможете создавать любые обьекты, сущности, структры, типы. Давайте рассмотрим в чем заключается «цимус» уникальных сервисов: либо в специфических данных, либо в специфическом алгоритме обработки данных, либо в смеси первого и второго. Так вот данные можно хранить на основе Hivext сервисов. По сути вам надо будет только вставить свой уникальный алгоритм в сервисы.

                        И в заключение: теперь представьте что у вас есть доступ к вашим данным, сервисам по стандартизированному кросс-платформенному АПИ: .Net, Java, JavaScript, AIR, Flash, другое. Достучатся к сервисам можно из любого ЯП. Интерфейс АПИ максмально одинаковый. Ну думаю сами мысль закончите…

                          0
                          Ну такое АПИ для сервисов — это стандарты WSDL/SOAP и стиль REST. Все одинаково и независимо от платформы, безо всяких дополнительных фреймворков (REST — это вообще по сути чисто концептуальная абстракция вокруг HTTP, не более того).

                          То, что вы говорите «Потому как 70% времени было потрачено на стандартные операции с юзерами, хранением объектов, прочее. Это один из частных примеров.»
                          Здесь речь идет о фреймворке в распространенном его понимании — стремление унифицировать «логику приложения», чтобы дать возможность сосредоточиться на бизнес-логике. Этой же цели следуют MVC-фреймворки типа RoR.

                          По поводу кроссплатформенности — хоть убейте не понимаю, ибо сама концепция веб-сервисов как таковых построена на том, что к сервису обращаются «на языке веб-сервисов», а не на языке, на котором написан сервис. Грубо говоря, кросс-платформенность определяется уже самим понятием «веб-сервис».

                          Сервисы данных (если я правильно понимаю, что они из себя в Hivext-е представляют) уже давно существуют и как концепция, и как реализация. Те же Adobe LiveCycle Services, Microsoft ADO.NET «Astoria» Data Services и так далее…

                          Сами веб-сервисы, к примеру, на платформе .NET существуют в виде тех же ASP.NET WebService'ов. Т.е. берем, создаем проект типа «веб-сервис» и вуаля — вновь созданный файл содержит класс, который уже унаследован «откуда надо» и реализует всю функциональность именно веб-сервиса. Вся общая функциональность есть в самом .NET Framework. В мире Java есть аналогичные штуки.
                            0
                            По поводу кроссплатформенности — хоть убейте не понимаю, ибо сама концепция веб-сервисов как таковых построена на том, что к сервису обращаются «на языке веб-сервисов», а не на языке, на котором написан сервис.
                            ок, но гораздо удобнее дергать методы объектов, методы прослойки, которая тупо поднимает объект из сервиса (в нашем случае это называется клиент). Зачем сделали DWR? все затем же, проще и удобнее дергатьметоды объектов

                            Сервисы данных (если я правильно понимаю, что они из себя в Hivext-е представляют) уже давно существуют и как концепция, и как реализация. Те же Adobe LiveCycle Services, Microsoft ADO.NET «Astoria» Data Services и так далее…
                            Отлично, мы не говорим что мы уникальны в мире, наши конкуренты Microsoft, Google, Amazon.
                            У каждого есть своя изюминка. Кому-то нравится одно, кому-то другое. У вас сколько продуктовых магазинов в районе? наверно несколько, и в каждом есть посетители, верно?

                              +1
                              Насчет этого понятно, спасибо.

                              Нам просто в свое время было не это нужно, посему мы в итоге не преминули воспользоваться готовеньким.

                              Ну и я могу только пожелать удачи вам, парни! Действительно, возможность выбора — это sehr gut :)
                    0
                    Скажите, пожалуйста, а зарегистрироваться у вас сейчас нельзя для управления проектами?
                      0
                      Приложение Управления проектами я еще разрабатываю. Как только открою, можно прямо оттуда будет регистрироваться, генерировать идентификаторы, управлять типами и объектами приложений.

                    Only users with full accounts can post comments. Log in, please.