Мастер-Тур(15):API для разработки онлайн поиска и бронирования — различия между версиями

Материал из Megatec
Перейти к: навигация, поиск
[досмотренная версия][досмотренная версия]
(Установка)
 
(не показано 336 промежуточных версий 12 участников)
Строка 1: Строка 1:
<span style="color:red;font-size:120%">Статья находится на стадии разработки.</span><br />
 
 
 
Версия статьи от {{REVISIONDAY}}-{{REVISIONMONTH}}-{{REVISIONYEAR}}.
 
Версия статьи от {{REVISIONDAY}}-{{REVISIONMONTH}}-{{REVISIONYEAR}}.
  
Строка 9: Строка 7:
  
 
==Введение==
 
==Введение==
Данный web-сервис разработан для разработки собственного сайта туроператору на основе API.
+
Данный 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''
  
 
==Список методов==
 
==Список методов==
===Выгрузка настроек службы поиска (Settings)===
+
 
Метод производит выгрузку настроек службы поиска.
+
Последовательность вызова методов сервиса<br />
 +
[[Файл:mb_273.png|1000px|Последовательность вызова методов сервиса]]
 +
 
 +
===Информация о состоянии службы поиска (statusCache)===
 +
Метод выводит информацию о состоянии службы поиска при ее загрузке.
 
* Формат запроса:
 
* Формат запроса:
** .../TourSearchOwin/Settings?
+
** GET .../TourSearchOwin/statusCache?
 
* Принимаемые параметры:
 
* Принимаемые параметры:
 
** нет принимаемых параметров
 
** нет принимаемых параметров
 
* Возвращаемый результат:
 
* Возвращаемый результат:
** '''ChildAgesSetting''' – регулируется настройкой [[Мастер-Тур(15):Программа туров. Панель администрирования#Общие настройки|максимальный возраст ребенка]] (массив возрастов, при которых турист будет считаться ребенком
+
** '''Initialized''' – информация о том, загружена ли служба или нет ('''false''' – инициализация кешей не завершена, '''true''' – инициализация кешей завершена)
** '''DurationSetting''' – регулируется настройкой [[Мастер-Тур(15):Программа туров. Панель администрирования#Общие настройки|максимальная продолжительность тура]] (массив продолжительностей, доступных в фильтрах для поиска)
+
** '''Status''' – состояние службы. Возможные значения: ''Запущена инициализация кэшей'', ''Инициализация кэшей завершена''
** '''RoundServiceSetting''' – признак округления цены (количество знаков после запятой)
+
** '''CacheName''' – информация о том, какой именно кеш сейчас считается (название)
** '''CacheReady''' – статус готовности службы поиска к работе (true/false)
+
** '''Iteration''' – порядковый номер считаемого справочника кеша
** '''EnableFiterTree''' – устаревшая настройка, будет убрана (по умолчанию всегда false)
+
** '''CacheCount''' – общее количество кешей
** '''EnableActualFilters''' – включены ли актуальные фильтры (true/false)
+
** '''ProcessMessage''' – детализация. Информацию можно разделить на 3 блока:
** '''CorrectLicense''' – проверка лицензии (true/false)
+
*** Загрузка всех справочных данных, кроме расчета маршрутов и актуальных фильтров. В этом случае сообщение будет ''Загрузка кэшей из БД''
** '''CorrectLicenseMessage''' – сообщение, если проверка лицензии не прошла
+
*** Расчет маршрутов. ''CacheName'' – ''HotelScheme'', сообщение будет ''tours load: 956 / 1234''
** '''IsCorrectUser''' – проверка наличия пользователя в таблице ''Userlist'', под которым запущена служба поиска (true/false)
+
*** Расчет актуальных фильтров. ''CacheName'' – ''ActualFilters'', сообщение будет ''Actual filter processed: 783012 / 3865687"''
** '''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''' – максимальное количество продолжительностей, которое будет обрабатываться в клиенте поиска
 
  
 
<div class="toccolours mw-collapsible mw-collapsed" style="width:900px">Пример
 
<div class="toccolours mw-collapsible mw-collapsed" style="width:900px">Пример
Строка 51: Строка 43:
 
Вызов метода Settings
 
Вызов метода Settings
 
<syntaxhighlight lang="java" enclose="div">
 
<syntaxhighlight lang="java" enclose="div">
http://localhost:9000/TourSearchOwin/Settings
+
GET http://localhost:9000/TourSearchOwin/statusCache
 
</syntaxhighlight>
 
</syntaxhighlight>
Возвращаемый результат метода Settings (в формате JSON)
+
Возвращаемый результат метода statusCache (в формате JSON)
 
<syntaxhighlight lang="java" enclose="div">
 
<syntaxhighlight lang="java" enclose="div">
 
{
 
{
  "ChildAgesSetting":   [
+
    "Initialized": false,
      1,  
+
    "Status": "Запущена инициализация кэшей",
      2,
+
    "CacheName": "ToursSearchView",
      3,
+
    "Iteration": 10,
      4,
+
    "CacheCount": 112,
      5,
+
    "ProcessMessage": "Загрузка кэшей из БД"
      6,
+
}
      7,
+
{
      8,
+
    "Initialized": false,
      9,
+
    "Status": "Запущена инициализация кэшей",
      10,
+
    "CacheName": "HotelScheme",
      11,
+
    "Iteration": 109,
      12,
+
    "CacheCount": 112,
      13,
+
    "ProcessMessage": "tours load: 956 / 1234"
      14,
+
}
      15,
+
{
      16
+
    "Initialized": false,
  ],
+
    "Status": "Запущена инициализация кэшей",
  "DurationSetting":   [
+
    "CacheName": "ActualFilters",
      1,
+
    "Iteration": 112,
      2,
+
    "CacheCount": 112,
      3,
+
    "ProcessMessage": "Actual filter processed: 783012 / 3865687"
      4,
+
}
      5,
+
{
      6,
+
    "Initialized": true,
      7,
+
    "Status": "Инициализация кэшей завершена",
      8,
+
    "CacheName": null,
      9,
+
    "Iteration": 0,
      10,
+
    "CacheCount": 0,
      11,
+
    "ProcessMessage": null
      12,
+
}
      13,
+
</syntaxhighlight>
      14,
+
</TD></TR></TABLE>
      15,
+
</div></div><br />
      16,
+
 
      17,
+
===Авторизация (Token)===
      18,
+
Метод производит получение авторизационного токена ([https://tools.ietf.org/html/rfc6749#section-1.3.3 описание стандарта]).
      19,
+
* Формат запроса:
      20
+
** POST .../TourSearchOwin/Token?
  ],
+
* Принимаемые параметры headers ( '''*''' – обязательный):
  "RoundServiceSetting": 2,
+
** '''Content-Type *''' – application/x-www-form-urlencoded
  "CacheReady": true,
+
 
  "EnableFiterTree": false,
+
* Принимаемые параметры POST запроса ( '''*''' – обязательный):
  "EnableActualFilters": true,
+
** '''grant_type *''' – текст ''password''
  "CorrectLicense": true,
+
** '''username *''' – логин представителя партнера или частного лица
  "CorrectLicenseMessage": "0deb1f882da1ec6301c961780507a180",
+
** '''password *''' – пароль представителя партнера или частного лица
  "IsCorrectUser": true,
+
 
  "IsShowCitizenAuthTourist": true,
+
* Возвращаемый результат:
  "IsShowFewCountPlaces": true,
+
** '''access_token''' – токен
  "IsShowBusTransferPlaces": true,
+
** '''token_type''' – тип токена
  "UseBusSeatChecks": 1,
+
** '''expires_in''' – код
  "UseTransferSeatChecks": 2,
+
** '''userKey''' – ключ пользователя
  "IsShowFiltersByCity": true,
+
** '''userType''' – тип пользователя (0 – представитель партнера, 1 – частное лицо)
  "CheckRealCourses": true,
+
** '''.issued''' – дата получения
  "CommonImagesFolderPath": "\\\\server\\Icons",
+
** '''.expires''' – дата действия до
  "UseApplyFiltersButton": false,
+
 
  "AutoSearchFiltersTimeout": 1,
+
<div class="toccolours mw-collapsible mw-collapsed" style="width:900px">Пример
  "UseFastSearchAlgoritm": true,
+
<div class="mw-collapsible-content">
  "MaxSearchDatesCountClient": 10,
+
<TABLE STYLE="border: 0.1em dashed #2F6FAB; margin: 8px; padding: 8px" WIDTH="99%"><TR><TD>
  "MaxDurationsCountClient": 14
+
Вызов метода 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
===Выгрузка списка валют (Currency)===
+
</syntaxhighlight>
Метод возвращает список используемых валют.
+
Возвращаемый результат метода Token (в формате JSON)
* Формат запроса:
+
<syntaxhighlight lang="java" enclose="div">
** .../TourSearchOwin/Currency
+
{
* Принимаемые параметры:
+
"access_token": "AQAAANCMnd8BFdERjHoAwE_Cl-sBAAAAdsCC8X7m9E-2bg0-uS0VfgAAAAAAAAADZgAAwAAAA-
** нет принимаемых параметров
+
EqAAAAAASAAACgAAAAEAAAAO4S-VrqBhQuhqliqrAKKfIgAQAAn-gfgP-rYjk-Krr1Ck2A-IGCw6FBhamUOzFxgTtk1hR-
* Возвращаемый результат:
+
GLMryFIH8VK5GmHdHubZWj4S7XcazGL1Kn5-VlbiYdW2ZVWpYlk638aV-XS2kpZ9YrKgViiM_x8RH5TPo4-
** '''Code''' – код валюты
+
9LhE7V-SjiB_CP_qs58DRKcyohq3Tz9QaiFgH1Ko7O2XKjTBG7SHyQPDPYjaqg9kDxmzq0UcIT6Fm4YkDxmm9-
** '''Name''' – наименование валюты
+
CW7u3cEFWcpiqKOc2VvZFKPPHc07uDOO4w9FXPhpXZwOqrJBxzhbr73RuhzPs_e-hgxKaIlsMaK5b0v5ReAMy1kuY0ebXA",",
** '''IsMain''' – признак валюты «Главная»
+
"token_type": "bearer",
** '''IsNational''' – признак валюты «Национальная»
+
"expires_in": 1209599,
** '''IsoCode''' – ISO код валюты
+
"userKey": "333",
** '''Key''' – идентификатор валюты
+
        "userType": "0",
** '''IsShowInSearch''' – признак показывать ли валюту в поиске
+
".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>
Вызов метода Currency
+
</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/Currency
+
GET http://localhost:9000/TourSearchOwin/Settings
 
</syntaxhighlight>
 
</syntaxhighlight>
Возвращаемый результат метода Currency (в формате JSON)
+
Возвращаемый результат метода Settings (в формате JSON)
 
<syntaxhighlight lang="java" enclose="div">
 
<syntaxhighlight lang="java" enclose="div">
[
+
{
       {
+
  "ChildAgesSetting":    [
       "Code": "EU",
+
       1,
      "Name": "Euro",
+
      2,
      "IsMain": false,
+
      3,
      "IsNational": false,
+
      4,
      "IsoCode": "EUR",
+
      5,
      "Key": 2,
+
      6,
      "IsShowInSearch": true
+
      7,
   },
+
      8,
      {
+
      9,
      "Code": "рб",
+
      10,
      "Name": "Рубль",
+
      11,
      "IsMain": false,
+
      12,
      "IsNational": true,
+
      13,
      "IsoCode": "RUR",
+
      14,
      "Key": 14,
+
      15,
      "IsShowInSearch": true
+
      16
   },
+
  ],
      {
+
  "DurationSetting":    [
      "Code": "$",
+
      1,
      "Name": "US Dollar",
+
      2,
      "IsMain": true,
+
      3,
      "IsNational": false,
+
      4,
      "IsoCode": "USD",
+
      5,
      "Key": 1,
+
      6,
      "IsShowInSearch": true
+
      7,
  }
+
      8,
]
+
      9,
</syntaxhighlight>
+
      10,
</TD></TR></TABLE>
+
      11,
</div></div><br />
+
      12,
 
+
      13,
===Выгрузка квотируемых услуг системы (QuotedServices)===
+
      14,
Метод производит выгрузку услуг с признаком «Квотируемая»
+
      15,
* Формат запроса:
+
      16,
** .../TourSearchOwin/QuotedServices
+
      17,
* Принимаемые параметры:
+
      18,
** нет принимаемых параметров
+
      19,
* Возвращаемый результат:
+
       20
** '''Key''' – идентификатор услуги
+
  ],
** '''Code''' – код услуги
+
  "RoundServiceSetting": 2,
** '''Name''' – наименование услуги (русский)
+
  "CacheReady": true,
** '''NameLat''' – наименование услуги (английский)
+
  "EnableFiterTree": false,
** '''IsDuration''' – наличие продолжительности у услуги
+
  "EnableActualFilters": true,
** '''IsCity''' – наличие города у услуги
+
  "CorrectLicense": true,
** '''IsSubCode1''' – признак наличия ''SubCode1'' у услуги (вид проживания у отеля, тариф у авиаперелета)
+
  "CorrectLicenseMessage": "0deb1f882da1ec6301c961780507a180",
** '''IsSubCode2''' – признак наличия ''SubCode2'' у услуги (тип питания у отеля)
+
  "IsCorrectUser": true,
** '''Quoted''' – признак квотируемости услуги
+
  "IsShowCitizenAuthTourist": true,
** '''CheckGeoPoint''' – наличие геоточек у услуги
+
  "IsShowFewCountPlaces": true,
** '''IsRoute''' – признак маршрутной услуги
+
  "IsShowBusTransferPlaces": true,
** '''LittlePercent''' – число в %, при которых будет считаться количество мест «Мало»
+
   "UseBusSeatChecks": 1,
** '''LittlePlace''' – число, при котором будет считаться количество мест «Мало»
+
  "UseTransferSeatChecks": 2,
** '''LittleAnd''' – признак наличия мест «Мало» – будем ли учитывать количество мест вместе с процентным соотношением между общим и оставшимся количеством мест
+
  "IsShowFiltersByCity": true,
** '''IsPartnerBasedOn''' – признак сопоставления партнера услуги в зависимости от отеля
+
  "CheckRealCourses": true,
** '''Control''' – идентификатор статуса услуги
+
  "CommonImagesFolderPath": "\\\\server\\Icons",
 
+
  "UseApplyFiltersButton": false,
<div class="toccolours mw-collapsible mw-collapsed" style="width:900px">Пример
+
  "AutoSearchFiltersTimeout": 1,
<div class="mw-collapsible-content">
+
  "UseFastSearchAlgoritm": true,
<TABLE STYLE="border: 0.1em dashed #2F6FAB; margin: 8px; padding: 8px" WIDTH="99%"><TR><TD>
+
  "MaxSearchDatesCountClient": 10,
Вызов метода QuotedServices
+
  "MaxDurationsCountClient": 14
<syntaxhighlight lang="java" enclose="div">
+
  "