Мастер-Тур(15):API для разработки онлайн поиска и бронирования — различия между версиями
| [досмотренная версия] | [досмотренная версия] |
Biryukov (обсуждение | вклад) |
Biryukov (обсуждение | вклад) (→Установка) |
||
| (не показаны 324 промежуточные версии 12 участников) | |||
| Строка 1: | Строка 1: | ||
| − | |||
| − | |||
Версия статьи от {{REVISIONDAY}}-{{REVISIONMONTH}}-{{REVISIONYEAR}}. | Версия статьи от {{REVISIONDAY}}-{{REVISIONMONTH}}-{{REVISIONYEAR}}. | ||
| Строка 9: | Строка 7: | ||
==Введение== | ==Введение== | ||
| − | Данный web-сервис | + | Данный web-сервис служит для разработки собственного сайта туроператору на основе API. |
==Установка== | ==Установка== | ||
| − | Для работы с web-сервисом необходимо установить [[Мастер-Тур(15):Установка#Установка службы поиска|службу поиска]].<br /> | + | Для работы с web-сервисом необходимо на отдающей стороне установить [[Мастер-Тур(15):Установка#Установка службы поиска|службу поиска]].<br /> |
После установки web-сервис будет доступен по адресу ''<nowiki>http://значение настройки "serviceAddress" в TourSearchOwin/"название метода"</nowiki>'' (пример: ''http://localhost:9000/TourSearchOwin/Settings'') | После установки web-сервис будет доступен по адресу ''<nowiki>http://значение настройки "serviceAddress" в TourSearchOwin/"название метода"</nowiki>'' (пример: ''http://localhost:9000/TourSearchOwin/Settings'') | ||
| + | |||
| + | ==Swagger== | ||
| + | Работу методов можно проверить с помощью Swagger по пути: ''http://localhost:9000/TourSearchOwin/SwaggerUI'' | ||
==Список методов== | ==Список методов== | ||
| Строка 20: | Строка 21: | ||
[[Файл:mb_273.png|1000px|Последовательность вызова методов сервиса]] | [[Файл:mb_273.png|1000px|Последовательность вызова методов сервиса]] | ||
| − | + | ===Информация о состоянии службы поиска (statusCache)=== | |
| − | === | + | Метод выводит информацию о состоянии службы поиска при ее загрузке. |
| − | Метод | ||
* Формат запроса: | * Формат запроса: | ||
| − | ** .../TourSearchOwin/ | + | ** GET .../TourSearchOwin/statusCache? |
* Принимаемые параметры: | * Принимаемые параметры: | ||
** нет принимаемых параметров | ** нет принимаемых параметров | ||
* Возвращаемый результат: | * Возвращаемый результат: | ||
| − | ** ''' | + | ** '''Initialized''' – информация о том, загружена ли служба или нет ('''false''' – инициализация кешей не завершена, '''true''' – инициализация кешей завершена) |
| − | + | ** '''Status''' – состояние службы. Возможные значения: ''Запущена инициализация кэшей'', ''Инициализация кэшей завершена'' | |
| − | + | ** '''CacheName''' – информация о том, какой именно кеш сейчас считается (название) | |
| − | ** ''' | + | ** '''Iteration''' – порядковый номер считаемого справочника кеша |
| − | + | ** '''CacheCount''' – общее количество кешей | |
| − | + | ** '''ProcessMessage''' – детализация. Информацию можно разделить на 3 блока: | |
| − | + | *** Загрузка всех справочных данных, кроме расчета маршрутов и актуальных фильтров. В этом случае сообщение будет ''Загрузка кэшей из БД'' | |
| − | ** ''' | + | *** Расчет маршрутов. ''CacheName'' – ''HotelScheme'', сообщение будет ''tours load: 956 / 1234'' |
| − | + | *** Расчет актуальных фильтров. ''CacheName'' – ''ActualFilters'', сообщение будет ''Actual filter processed: 783012 / 3865687"'' | |
| − | ** ''' | ||
| − | ** ''' | ||
| − | ** ''' | ||
| − | ** '' | ||
| − | * | ||
| − | ** '' | ||
| − | |||
| − | |||
| − | * | ||
| − | ** | ||
| − | |||
| − | |||
| − | |||
<div class="toccolours mw-collapsible mw-collapsed" style="width:900px">Пример | <div class="toccolours mw-collapsible mw-collapsed" style="width:900px">Пример | ||
| Строка 56: | Строка 43: | ||
Вызов метода Settings | Вызов метода Settings | ||
<syntaxhighlight lang="java" enclose="div"> | <syntaxhighlight lang="java" enclose="div"> | ||
| − | http://localhost:9000/TourSearchOwin/ | + | GET http://localhost:9000/TourSearchOwin/statusCache |
</syntaxhighlight> | </syntaxhighlight> | ||
| − | Возвращаемый результат метода | + | Возвращаемый результат метода statusCache (в формате JSON) |
<syntaxhighlight lang="java" enclose="div"> | <syntaxhighlight lang="java" enclose="div"> | ||
{ | { | ||
| − | + | "Initialized": false, | |
| − | + | "Status": "Запущена инициализация кэшей", | |
| − | + | "CacheName": "ToursSearchView", | |
| − | + | "Iteration": 10, | |
| − | + | "CacheCount": 112, | |
| − | + | "ProcessMessage": "Загрузка кэшей из БД" | |
| − | + | } | |
| − | + | { | |
| − | + | "Initialized": false, | |
| − | + | "Status": "Запущена инициализация кэшей", | |
| − | + | "CacheName": "HotelScheme", | |
| − | + | "Iteration": 109, | |
| − | + | "CacheCount": 112, | |
| − | + | "ProcessMessage": "tours load: 956 / 1234" | |
| − | + | } | |
| − | + | { | |
| − | + | "Initialized": false, | |
| − | + | "Status": "Запущена инициализация кэшей", | |
| − | + | "CacheName": "ActualFilters", | |
| − | + | "Iteration": 112, | |
| − | + | "CacheCount": 112, | |
| − | + | "ProcessMessage": "Actual filter processed: 783012 / 3865687" | |
| − | + | } | |
| − | + | { | |
| − | + | "Initialized": true, | |
| − | + | "Status": "Инициализация кэшей завершена", | |
| − | + | "CacheName": null, | |
| − | + | "Iteration": 0, | |
| − | + | "CacheCount": 0, | |
| − | + | "ProcessMessage": null | |
| − | + | } | |
| − | + | </syntaxhighlight> | |
| − | + | </TD></TR></TABLE> | |
| − | + | </div></div><br /> | |
| − | + | ||
| − | + | ===Авторизация (Token)=== | |
| − | + | Метод производит получение авторизационного токена ([https://tools.ietf.org/html/rfc6749#section-1.3.3 описание стандарта]). | |
| − | + | * Формат запроса: | |
| − | + | ** POST .../TourSearchOwin/Token? | |
| − | + | * Принимаемые параметры headers ( '''*''' – обязательный): | |
| − | + | ** '''Content-Type *''' – application/x-www-form-urlencoded | |
| − | + | ||
| − | + | * Принимаемые параметры POST запроса ( '''*''' – обязательный): | |
| − | + | ** '''grant_type *''' – текст ''password'' | |
| − | + | ** '''username *''' – логин представителя партнера или частного лица | |
| − | + | ** '''password *''' – пароль представителя партнера или частного лица | |
| − | + | ||
| − | + | * Возвращаемый результат: | |
| − | + | ** '''access_token''' – токен | |
| − | + | ** '''token_type''' – тип токена | |
| − | + | ** '''expires_in''' – код | |
| − | + | ** '''userKey''' – ключ пользователя | |
| − | + | ** '''userType''' – тип пользователя (0 – представитель партнера, 1 – частное лицо) | |
| − | + | ** '''.issued''' – дата получения | |
| − | + | ** '''.expires''' – дата действия до | |
| − | + | ||
| − | + | <div class="toccolours mw-collapsible mw-collapsed" style="width:900px">Пример | |
| − | + | <div class="mw-collapsible-content"> | |
| − | + | <TABLE STYLE="border: 0.1em dashed #2F6FAB; margin: 8px; padding: 8px" WIDTH="99%"><TR><TD> | |
| − | + | Вызов метода Token | |
| − | } | + | <syntaxhighlight lang="java" enclose="div"> |
| − | </syntaxhighlight> | + | POST http://localhost:9000/TourSearchOwin/Token HTTP/1.1 |
| − | </TD></TR></TABLE> | + | Content-Type: application/x-www-form-urlencoded |
| − | </div></div><br /> | + | |
| − | + | grant_type=password&username=test&password=1 | |
| − | ===Выгрузка | + | </syntaxhighlight> |
| − | Метод | + | Возвращаемый результат метода Token (в формате JSON) |
| − | * Формат запроса: | + | <syntaxhighlight lang="java" enclose="div"> |
| − | ** .../TourSearchOwin/ | + | { |
| − | * Принимаемые параметры: | + | "access_token": "AQAAANCMnd8BFdERjHoAwE_Cl-sBAAAAdsCC8X7m9E-2bg0-uS0VfgAAAAAAAAADZgAAwAAAA- |
| − | ** нет принимаемых параметров | + | EqAAAAAASAAACgAAAAEAAAAO4S-VrqBhQuhqliqrAKKfIgAQAAn-gfgP-rYjk-Krr1Ck2A-IGCw6FBhamUOzFxgTtk1hR- |
| − | * Возвращаемый результат: | + | GLMryFIH8VK5GmHdHubZWj4S7XcazGL1Kn5-VlbiYdW2ZVWpYlk638aV-XS2kpZ9YrKgViiM_x8RH5TPo4- |
| − | ** ''' | + | 9LhE7V-SjiB_CP_qs58DRKcyohq3Tz9QaiFgH1Ko7O2XKjTBG7SHyQPDPYjaqg9kDxmzq0UcIT6Fm4YkDxmm9- |
| − | ** ''' | + | CW7u3cEFWcpiqKOc2VvZFKPPHc07uDOO4w9FXPhpXZwOqrJBxzhbr73RuhzPs_e-hgxKaIlsMaK5b0v5ReAMy1kuY0ebXA",", |
| − | ** ''' | + | "token_type": "bearer", |
| − | ** ''' | + | "expires_in": 1209599, |
| − | ** ''' | + | "userKey": "333", |
| − | ** ''' | + | "userType": "0", |
| − | ** ''' | + | ".issued": "Thu, 05 Apr 2018 12:05:31 GMT", |
| − | + | ".expires": "Thu, 19 Apr 2018 12:05:31 GMT" | |
| − | <div class="toccolours mw-collapsible mw-collapsed" style="width:900px">Пример | + | } |
| − | <div class="mw-collapsible-content"> | + | </syntaxhighlight> |
| − | <TABLE STYLE="border: 0.1em dashed #2F6FAB; margin: 8px; padding: 8px" WIDTH="99%"><TR><TD> | + | </TD></TR></TABLE> |
| − | Вызов метода | + | </div></div><br /> |
| + | |||
| + | ===Выгрузка настроек службы поиска (Settings)=== | ||
| + | Метод производит выгрузку настроек службы поиска. | ||
| + | * Формат запроса: | ||
| + | ** GET .../TourSearchOwin/Settings? | ||
| + | * Принимаемые параметры: | ||
| + | ** нет принимаемых параметров | ||
| + | * Возвращаемый результат: | ||
| + | ** '''ChildAgesSetting''' – регулируется настройкой [[Мастер-Тур(15):Программа туров. Настройки|максимальный возраст ребенка]] (массив возрастов, при которых турист будет считаться ребенком | ||
| + | ** '''DurationSetting''' – регулируется настройкой [[Мастер-Тур(15):Программа туров. Настройки|максимальная продолжительность тура]] (массив продолжительностей, доступных в фильтрах для поиска) | ||
| + | ** '''RoundServiceSetting''' – признак округления цены (количество знаков после запятой) | ||
| + | ** '''CacheReady''' – статус готовности службы поиска к работе (true/false) | ||
| + | ** '''EnableFiterTree''' – устаревшая настройка, будет убрана (по умолчанию всегда false) | ||
| + | ** '''EnableActualFilters''' – включены ли актуальные фильтры (true/false) | ||
| + | ** '''CorrectLicense''' – проверка лицензии (true/false) | ||
| + | ** '''CorrectLicenseMessage''' – сообщение, если проверка лицензии не прошла | ||
| + | ** '''IsCorrectUser''' – проверка наличия пользователя в таблице ''Userlist'', под которым запущена служба поиска (true/false) | ||
| + | ** '''IsShowCitizenAuthTourist''' – настройка запрашивать гражданство при регистрации частного лица (true/false) | ||
| + | ** '''IsShowFewCountPlaces''' – настройка отображения числового значения оставшихся мест, когда достигнуто значение «Мало» (true/false) | ||
| + | ** '''IsShowBusTransferPlaces''' – использовать фильтр наличие мест на автобусный переезд в поиске (true/false) | ||
| + | ** '''UseBusSeatChecks''' – план рассадки автобусного переезда (0 – не отображать, 1 – отображать без проверки, 2 – отображать с проверкой) | ||
| + | ** '''UseTransferSeatChecks''' – план рассадки трансфера (0 – не отображать, 1 – отображать без проверки, 2 – отображать с проверкой) | ||
| + | ** '''IsShowFiltersByCity''' – отображать фильтр по городам на главной странице поиска (true/false) | ||
| + | ** '''CheckRealCourses''' – включена ли проверка курсов реальных валют при поиске (true/false) | ||
| + | ** '''CommonImagesFolderPath''' – путь к папке для хранения изображений | ||
| + | ** '''UseApplyFiltersButton''' – отображать кнопку «Применить фильтры» (true/false) | ||
| + | ** '''AutoSearchFiltersTimeout''' – задержка между выбором дополнительных фильтров и выводом результатов (в секундах) | ||
| + | ** '''UseFastSearchAlgoritm''' – использовать быстрый алгоритм поиска (true/false) | ||
| + | ** '''MaxSearchDatesCountClient''' – максимальное количество дат, которое будет обрабатываться в клиенте поиска | ||
| + | ** '''MaxDurationsCountClient''' – максимальное количество продолжительностей, которое будет обрабатываться в клиенте поиска | ||
| + | ** '''UseHotelCategoryGlobalCodeInDopFilter''' – использовать глобальные коды категорий отелей в поиске | ||
| + | ** '''UsePansionGlobalCodeInDopFilter''' – использовать глобальные коды питаний в поиске | ||
| + | ** '''CheckTouristDataInBasket''' – проверять корректность данных туристов | ||
| + | ** '''SimpleRegistration''' – упрощенная регистрация частного лица | ||
| + | ** '''ShowHotelImagesInSearch''' – показывать описание и изображения отелей в поиске | ||
| + | ** '''CacheReadyMessage''' – сообщение о готовности службы поиска или службы расчета актуальных фильтров. Варианты возвращаемых значений: | ||
| + | *** ''<add key="enableActualFilters" value="true" />'' - CacheReady: true = CacheReadyMessage: "Кеш инициализирован"; CacheReady: false = CacheReadyMessage: "Кеш еще не инициализирован" | ||
| + | *** ''<add key="enableActualFilters" value="false" />'' - Служба актуальных фильтров недоступна (выключена, неверно указана ссылка на нее и т.п.) CacheReadyMessage: "Служба актуальных фильтров недоступна"; Служба актуальных фильтров доступна но не готова - CacheReadyMessage: "Кеш службы актуальных фильтров не инициализирован"; Служба актуальных фильтров готова, а основная служба не готова - CacheReadyMessage: "Кеш ещё не инициализирован"; Служба актуальных фильтров готова, и основная служба готова - CacheReadyMessage: "Кеш ещё инициализирован". | ||
| + | ** '''nodeId''' – уникальный идентификатор узла в кластере балансировки нагрузки [[Мастер-Тур(15):Балансировщик нагрузки HaProxy|HaProxy]] | ||
| + | ** '''FullPaymentPeriod''' – полная оплата с даты бронирования (может быть null) | ||
| + | ** '''FullPaymentCheckin''' – полная оплата до даты заезда (может быть null) | ||
| + | ** '''PrePaymentPeriod''' – предоплата с даты бронирования (может быть null) | ||
| + | ** '''PrePaymentCheckin''' – предоплата до даты заезда (может быть null) | ||
| + | ** '''PrePaymentCu"''' – значение предоплаты в y.e. (может быть null) | ||
| + | ** '''PrePaymentPercent''' – значение предоплаты в процентах (может быть null) | ||
| + | <div class="toccolours mw-collapsible mw-collapsed" style="width:900px">Пример | ||
| + | <div class="mw-collapsible-content"> | ||
| + | <TABLE STYLE="border: 0.1em dashed #2F6FAB; margin: 8px; padding: 8px" WIDTH="99%"><TR><TD> | ||
| + | Вызов метода Settings | ||
<syntaxhighlight lang="java" enclose="div"> | <syntaxhighlight lang="java" enclose="div"> | ||
| − | http://localhost:9000/TourSearchOwin/ | + | GET http://localhost:9000/TourSearchOwin/Settings |
</syntaxhighlight> | </syntaxhighlight> | ||
| − | Возвращаемый результат метода | + | Возвращаемый результат метода Settings (в формате JSON) |
<syntaxhighlight lang="java" enclose="div"> | <syntaxhighlight lang="java" enclose="div"> | ||
| − | [ | + | { |
| − | + | "ChildAgesSetting": [ | |
| − | " | + | 1, |
| − | + | 2, | |
| − | + | 3, | |
| − | + | 4, | |
| − | + | 5, | |
| − | + | 6, | |
| − | + | 7, | |
| − | + | 8, | |
| − | + | 9, | |
| − | + | 10, | |
| − | + | 11, | |
| − | + | 12, | |
| − | + | 13, | |
| − | + | 14, | |
| − | + | 15, | |
| − | + | 16 | |
| − | + | ], | |
| − | + | "DurationSetting": [ | |
| − | + | 1, | |
| − | + | 2, | |
| − | + | 3, | |
| − | + | 4, | |
| − | + | 5, | |
| − | + | 6, | |
| − | + | 7, | |
| − | + | 8, | |
| − | + | 9, | |
| − | </syntaxhighlight> | + | 10, |
| − | </TD></TR></TABLE> | + | 11, |
| − | </div></div><br /> | + | 12, |
| − | + | 13, | |
| − | + | 14, | |
| − | + | 15, | |
| − | + | 16, | |
| − | + | 17, | |
| − | + | 18, | |
| − | + | 19, | |
| − | + | 20 | |
| − | + | ], | |
| − | + | "RoundServiceSetting": 2, | |
| − | + | "CacheReady": true, | |
| − | + | "EnableFiterTree": false, | |
| − | + | "EnableActualFilters": true, | |
| − | + | "CorrectLicense": true, | |
| − | + | "CorrectLicenseMessage": "0deb1f882da1ec6301c961780507a180", | |
| − | + | "IsCorrectUser": true, | |
| − | + | "IsShowCitizenAuthTourist": true, | |
| − | + | "IsShowFewCountPlaces": true, | |
| − | + | "IsShowBusTransferPlaces": true, | |
| − | + | "UseBusSeatChecks": 1, | |
| − | + | "UseTransferSeatChecks": 2, | |
| − | + | "IsShowFiltersByCity": true, | |
| − | + | "CheckRealCourses": true, | |
| − | + | "CommonImagesFolderPath": "\\\\server\\Icons", | |
| + | "UseApplyFiltersButton": false, | ||
| + | "AutoSearchFiltersTimeout": 1, | ||
| + | "UseFastSearchAlgoritm": true, | ||
| + | "MaxSearchDatesCountClient": 10, | ||
| + | "MaxDurationsCountClient": 14 | ||
| + | "UseHotelCategoryGlobalCodeInDopFilter": false | ||
| + | "UsePansionGlobalCodeInDopFilter": false | ||
| + | "CheckTouristDataInBasket": true | ||
| + | "SimpleRegistration": false | ||
| + | |||