2. OData – это работа с ресурсами
• REST (Representational State Transfer) - стиль построения
архитектуры распределенного приложения
• Пользователь взаимодействуют с ресурсами, которыми может
быть всё, что можно поименовать
• Каждый ресурс имеет свой уникальный идентификатор – URI
• Взаимодействие с ресурсами происходит по средствам HTTP
(GET, POST, PUT и DELETE)
• Ресурсы описывают себя сами
• Content-Type, Content-Length, …
• В ресурсах могут содержатся ссылки на другие ресурсы
3. Ограничения REST
• Stateless – отсутствие состояния у сервера. Вся информация,
необходимая для обработки запроса ресурса, содержится в
самом запросе
• Idempotent – повторное действие над объектом не
изменяет его
• Side Effects – запрашивая значение объекта по GET не должно
происходить изменение этого или другого объекта
• HTTP(s) only
4.
5. Кто уже использует?
• BPMonline Mobile
• BPMonline Mobile powered by Resco
• BPMonline Loyalty
• Проект Zyxel
• BPMonline 7.0
6. Примеры запросов
• Получение коллекции объектов
• http://../Service.svc/Customers
• Получение объекта по PK
• http://../Service.svc/Customers(523)
• Получение поля объекта
• http://../Service.svc/Customers(523)/Name
• Получение коллекции объектов с сортировкой
• http://../Service.svc/Customers?$orderby=Name
• Постарничный доступ
• http://../Service.svc/Customers?$top=10&$skip=20
• Получение коллекции объектов с фильтрацией
• http://../Service.svc/Customers?$filter=Created gt ’2008-01-01’
7. Добавление новой записи
• POST /Service.svc/ContactCollection
• Host mysite.com
• Authorization: Basic Uy5LYXJsbzpTLkthcmxv
• Content-Type: application/json
• {
• Name: 'John',
• Phone: ' 776-33-22',
• Account: { _metadata: uri 'Accounts(2)' }
• }
8. Изменение и удаление записи
• MERGE /Service.svc/ContactCollection(5)
• Host mysite.com
• Authorization: Basic Uy5LYXJsbzpTLkthcmxv
• Content-Type: application/json
• {
• Name: 'John Best'
• }
• DELETE /Service.svc/ContactCollection(5)
9. Администрирование OData
• Для каждого запроса строится ESQ
• Автоматически всегда используются права текущего
пользователя
• Администрируемая операция (5.1.2, 5.4)
• Дополнительные права на объекты для внешних сервисов (5.5)
10. Ресурсы в OData. Генерация метаданных
• Все ресурсы в OData описываются с помощью метаданных
• http://../EntityDataService.svc/$metadata
• Сущности
• EntitySchema => ResourceType
• Колонки
• EntitySchemaColumn => ResourceProperty
• Ссылки на сущности и обратные ссылки
• Lookup Column => NavigationProperty
11. Фичи BPMonline
• Поддержка двух типов авторизации
• Basic
• Cookie
• Получение значений по умолчанию
• /EntityDataService.svc/ContactCollection?GetDefValues=1
• Кодирование в Json
• /EntityDataService.svc/ContactCollection?$format=json*
• Content-type: application/json; verbose
• Accept-type: application/json; verbose
• Работа с бинарными данными
• Кэширование частых запросов
16. Как посмотреть что уже есть
• Идем на коммюнити
• В поиск вводим «OData»
• Ищем в статьях
• Первая же статья содержит список поддерживаемой
функциональности
19. Запуск бизнес процессов в BPMonline
Старт нового процесса
https://demo.bpmonline.com/ServiceModel/ProcessEngineService.svc/
{ProcessSchemaName}/Execute/
• Заголовок запроса должен содержать авторизационную и
сессионную куки
• {ProcessSchemaName} – имя процесса, экземпляр которого
необходимо запустить на выполнение
Editor's Notes
Сегодня OData используется в массе продуктов Microsoft и сторонних компаний: Excel, SharePoint, SQL Server Reporting Services, Dynamics CRM, Windows Server и Windows Azure.
Сильно похоже на описание принцепов интернета Representational State Transfer «передача состояния представления»
Должно быть четкое понимание разницы. Увеличить цену за проезд на 1 грн – это бизнес операция Заменить старое значение цены с 2 грн на 3грн – это изменение ресурса Representational State Transfer «передача состояния представления»
Термин идемпотентность означает свойство математического объекта, которое проявляется в том, что повторное действие над объектом не изменяет его. Какие преимущества
Кэширование частых запросов при постраничности по умолчанию Дополнительный параметр для пользовательских кэшей http://tscoredev5:88/BPMonline550Solution/0/ServiceModel/EntityDataService.svc/ContactCollection? GetDefValues = 1
$value – возвращает только значение поля без какого либо кодирования или форматирования, Если не указывать $value значение поля будет обернуто в xml или json
Побочный продукт Посути реализовали свой парсер линк запросов
Информация всегда обновляется и держиться актуальной
Жизненный цикл запроса на примере собственного модуля Создание хендлера . Обработка запросов в хендлере. Получение UserConnection Жизненный цикл хендлера Как организовать анонимный доступ к сервису или хендлеру (С UserConnection и без)