====== Модель взаимодействия ====== В UniPhone API применяются две модели взаимодействия между участниками: * Publish & Subscribe (PubSub) * Remote Procedure Calls (RPC) ===== Publish & Subscribe ===== В модели PubSub отправители и получатели сообщений не связаны друг с другом напрямую. Отправитель предоставляет информацию в абстрактной "теме" (topic), а получатели принимают сообщения объявив о своей заинтересованности к соответствующей теме. Направление потока сообщений может быть один-ко-многим, многие-к-одному и многие-ко-многим. Отправителя обычно называют издателем (publisher), а получателя - подписчиком (subscriber). {{ ::uniphonepubsub.png?nolink&460 |}} ==== Типы объектов модели ==== Ниже перечислены типы объектов, используемых в модели PubSub. * **Тема (topic)**. Именованный ресурс, в которой передаются сообщения от издателя. * **Подписка (subscribe)**. Внутренний ресурс, формирующий поток сообщений от одной конкретной темы, к заинтересованному в данных приложению. * **Издатель (publisher)**. Внешний по отношению к системе источник информации. Издатель формирует сообщения и помещает их в соответствующую тему через механизм публикации. * **Подписчик (subscriber)**. Внешний по отношению к системе приемник информации. Подписчик выражает свою заинтересованность в выбранной им теме и принимает сообщения по мере их появления. * **Сообщение (message)**. Сочетание данных и (необязательно) атрибутов, которые передаются от издателя к подписчику. Допускается публикация сообщений от нескольких издателей в одной теме. Например, при наличии в инфраструктуре организации двух IP АТС, сообщения могут доставляться с обеих через единый информационный канал. ===== Remote Procedure Calls ===== Модель RPC подразумевает получение интересующей информации по средством обращения к ее поставщику. Выполнение запроса и его обработка выполняется асинхронно. Сервер UniPhone выступает посредником при вызове удаленной процедуры и возврате результата выполнения. {{ ::uniphonerpc.png?nolink&640 |}} ==== Принцип работы ==== В вызывающей удаленную процедуру программе (Caller) подготавливается запрос (Response). Вызов процедуры выполняется через посредника (RPC Dealer). Посредник передает запрос в вызываемую программу (Callee) передает управление вызываемой процедуре (doSomething). По окончанию выполнения процедура возвращает ответ (Response). Ответ передается в процедуру, которую вызывающую программа определила для его обработки (onComplete). Удаленная процедура должна быть предварительно зарегистрирована на сервере UniPhone. Не допускается двойная регистрация процедур с одним именем. ==== Именование ресурсов ==== UniPhone API использует URI формат для именование ресурсов включая "темы", зарегистрированные процедуры и ошибки. Все они образуют единую, глобальную иерархию имен: * **/provider.*** - пространство имен ресурсов провайдера. * **/provider.topics.*** - пространство имен тем публикуемых провайдером. * **/provider.methods.*** - пространство имен удаленных процедур реализованных на стороне провайдера. * **/crm.*** - пространство имен ресурсов CRM-системы. * **/crm.topics.*** - пространство имен тем публикуемых CRM-систой. * **/crm.methods.*** - пространство имен удаленных процедур реализованных на стороне CRM-системы. Например, обозначение ресурса call как "темы" в пространстве имен провайдера выглядит так: /provider.topics.call