Описание API
Описание API
Описание API версии 4
Обмен данными между клиентской частью (Android/iOS приложение) и сервером data.egov.kz осуществляется через протокол HTTPS. Поиск по данным реализован с использованием технологии elasticsearch. При запросе параметры передаются по протоколу HTTPS методом GET в следующем формате:
/api/v4/dataset?source={Query in Json Object}
/api/v4/dataset/version?source={Query in Json Object}
Данный запрос осуществляет поиск по набору данных dataset, при этом передается параметр source, который описывает как именно должен производиться поиск и фильтрация.
/api/v4/mapping/dataset
/api/v4/mapping/dataset/version
Данный запрос описывает поля записей, используемых в наборе данных dataset
Ответ сервера возвращается в формате JSON, он содержит выборку данных или сообщение об ошибке.
Ниже приведены примеры запросов.
Пример 1:
Вывести описание полей с их типами и структурой, а также версии набора.
Для получения списка полей и их типов выполните запрос указанный ниже.
Запрос выглядит следующим образом:
/api/v4/mapping/astana_kalasynyn_kylmystyk_kuk1
Ответ:
{ "astana_kalasynyn_kylmystyk_kuk1" : { "mappings" : { "v1" : { "properties" : { "city_code" : { "type" : "string", "store" : true }, "crime_code" : { "type" : "string", "store" : true }, "dat_sover" : { "type" : "string", "store" : true }, "hard_code" : { "type" : "string", "store" : true }, "home_number" : { "type" : "string", "store" : true }, "latitude" : { "type" : "string", "store" : true }, "longitude" : { "type" : "string", "store" : true }, ...
Пример 2:
Получить выборку из совершенных уголовных преступлений по Астане:
/api/v4/mapping/astana_kalasynyn_kylmystyk_kuk1
* В случае если у набора имеется более 1 версии, нужно указать необходимую версию, например:
/api/v4/mapping/astana_kalasynyn_kylmystyk_kuk1/v1
Ответ:
{ "astana_kalasynyn_kylmystyk_kuk1" : { "mappings" : { "v1" : { "properties" : { "city_code" : { "type" : "string", "store" : true }, "crime_code" : { "type" : "string", "store" : true }, "dat_sover" : { "type" : "string", "store" : true }, "hard_code" : { "type" : "string", "store" : true }, "home_number" : { "type" : "string", "store" : true }, "latitude" : { "type" : "string", "store" : true }, "longitude" : { "type" : "string", "store" : true }, ...
Пример 3:
Чтобы получить первые 5 записей из набора данных по совершенным уголовным преступлениям г.Астана укажите значение параметра size:
/api/v4/astana_kalasynyn_kylmystyk_kuk1/v1?source={"size": 5}
* В случае если у набора имеется более 1 версии, Вы можете заменить версию на необходимую Вам, например:
/api/v4/astana_kalasynyn_kylmystyk_kuk1/v3?source={"size": 5}
Ответ:
[ { "dat_sover" : "01.01.2016", "street" : "ДОСТЫЌ", "stat" : "ст.293 ч.2", "time_period" : "1", "organ" : "УВД районаЕсиль", "crime_code" : "2930", "hard_code" : "2", "month" : "1", "longitude" : "71.434872580000004", "year" : "2016", "city_code" : "г. Астана", "ud" : "167115030000038", "latitude" : "51.126707959999997", "objectid" : "2316830", "home_number" : "13", "reg_code" : "РайонЕсил" }, { "dat_sover" : "01.01.2016", "street" : "САУРАН", "stat" : "ст.190 ч.1", "time_period" : "3", "organ" : "УВД районаЕсиль", "crime_code" : "1900", "hard_code" : "1", "month" : "1", "longitude" : "71.422323582999994", "year" : "2016", "city_code" : "г. Астана", "ud" : "157115030024346", "latitude" : "51.121251012999998", "objectid" : "2139389", "home_number" : "6/1", "reg_code" : "РайонЕсил" }, ...
Пример 4:
Чтобы получить 3 совершенных уголовных преступлениях пог.Астана, при этом пропустив первые 5, укажите параметр from:
/api/v4/astana_kalasynyn_kylmystyk_kuk1/v1?source={"from":5, "size": 3}
Ответ:
[ { "dat_sover" : "01.01.2016", "street" : "МЈСКЕУ", "stat" : "ст.188 ч.1", "time_period" : "1", "organ" : "СарыаркинскийРУВД", "crime_code" : "1880", "hard_code" : "2", "month" : "1", "longitude" : "71.397837250999999", "year" : "2016", "city_code" : "г. Астана", "ud" : "167113030000156", "latitude" : "51.180052580000002", "objectid" : "860949", "home_number" : "14/3", "reg_code" : "РайонСарыарка" }, { "dat_sover" : "01.01.2016", "street" : "КОНСТИТУЦИИ", "stat" : "ст.191 ч.1", "time_period" : "1", "organ" : "СарыаркинскийРУВД", "crime_code" : "1910", "hard_code" : "2", "month" : "1", "longitude" : "71.393267264000002", "year" : "2016", "city_code" : "г. Астана", "ud" : "167113030000082", "latitude" : "51.195856544999998", "objectid" : "1932847", "home_number" : "19", "reg_code" : "Район Сарыарка" }, ...
Пример 5: Поиск по полям: вывести почтовые отделения Астаны, работающие без перерыва по улице Сыганак.
Поиск по полям: вывести перечень совершенных уголовных преступлений по г. Астана по улице Иманова, а также 2ой тяжестью преступления.
/api/v4/astana_kalasynyn_kylmystyk_kuk1/v1?source={ "size":100, "query": { "bool":{ "must":[ {"match":{"hard_code": "2"}}, {"match":{"street": "Иманова"}} ] } } }
Производится поиск объектов, где поле "hard_code" содержит подстроку "2" и поле "street" содержит подстроку "Иманова". Ответ содержит все объекты для которых выполняются оба условия. Наименование полей, а также их типы можно выяснить следуя примеру 1.
Ответ:
[ { "dat_sover" : "18.02.2016", "street" : "ИМАНОВА", "stat" : "ст.188 ч.1", "time_period" : "1", "organ" : "Алматинский РУВД", "crime_code" : "1880", "hard_code" : "2", "month" : "2", "longitude" : "71.444085013999995", "year" : "2016", "city_code" : "г. Астана", "ud" : "167111030008206", "latitude" : "51.164931746000001", "objectid" : "1942307", "home_number" : "21", "reg_code" : "Район Алматы" }, { "dat_sover" : "22.05.2016", "street" : "ИМАНОВА", "stat" : "ст.120 ч.1", "time_period" : "1", "organ" : "Алматинский РУВД", "crime_code" : "1200", "hard_code" : "2", "month" : "5", "longitude" : "71.434266149999999", "year" : "2016", "city_code" : "г. Астана", "ud" : "167111030026076", "latitude" : "51.163761094000002", "objectid" : "2431516", "home_number" : "9", "reg_code" : "Район Алматы" }, ...
Пример 6:
Получить медицинские организации РК, которые находятся в Акмолинской области, в радиусе 10 км от координат (51.608524, 68.171934) в поле geoposition (может быть использовано в том случае, если тип поля в наборе помечен как «geoposition»):
/api/v4/medorg/v1?source={ "size":100, "query": { "filtered": { "query":{ "bool":{ "must":[ {"match":{ "address": "Акмолинская" }} ] } }, "filter": { "geo_distance": { "distance": "10km", "geoposition": { "lat": 51.608524, "lon": 68.171934 } } } } } }
Ответ:
[ { "region" : "Акмолнская область", "id" : 148, "address" : "Акмолинская область, Атбасарский район, село Самарка", "geoposition" : "51.602993, 68.032539", "name" : "Самарский МП" }, { "region" : "Акмолнская область", "id" : 125, "address" : "Акмолинская область, Атбасарский район, село Сергеевка", "geoposition" : "51.653683, 68.198503", "name" : "Сергеевская ВА" }, ...
Пример 7:
Вывести все медицинские организации РК, находящиеся в Южно-Казахстанской области, в радиусе 1200 м от координат (42.359461, 69.622625) в поле geoposition и отсортированные в порядке удаленности от этих координат (может быть использовано в том случае, если тип поля в наборе помечен как «geoposition»):
/api/v4/medorg/v1?source={ "size":100, "query": { "filtered": { "query":{ "bool":{ "must":[ {"match":{ "region": "Южно-Казахстанскаяобласть" }} ] } }, "filter": { "geo_distance": { "distance": "1200m", "geoposition": { "lat": 42.359461, "lon": 69.622625 } } } } }, "sort": [{ "_geo_distance": { "geoposition": { "lat": 42.359461, "lon": 69.622625 }, "order": "asc", "unit": "m" } }] }
Ответ:
[ { "region" : "Южно-Казахстанская область", "id" : 3178, "address" : "г.Шымкент, мкрНурсат, стр 125/1", "geoposition" : "42.359461, 69.622625", "name" : "ГККП " }, { "region" : "Южно-Казахстанская область", "id" : 3230, "address" : "г.Шымкент, мкрНурсат б /н", "geoposition" : "42.358324, 69.627430", "name" : "ГКП на ПХВ " }, ...
Пример 8:
Поиск по полям: вывести список в порядке удаленности от координат (42.358324, 69.627430) по полю geoposition (может быть использовано в том случае, если тип поля в наборе помечен как «geoposition»):
/api/v4/medorg/v1?source={ "size":100, "query": { "bool":{ "must":[ {"match": {"region": "Южно"}}, {"match": {"address": "Шымкент"}} ] } }, "sort": [{ "_geo_distance": { "geoposition": { "lat": 42.358324, "lon": 69.627430 }, "order": "asc", "unit": "km" } }] }
Ответ:
[ { "region" : "Южно-Казахстанская область", "id" : 3204, "address" : "г. Шымкент, ул. ЖибекЖолы б/н", "geoposition" : "42.330978, 69.626532 ", "name" : "ГККП " }, { "region" : "Южно-Казахстанская область", "id" : 3229, "address" : "г. Шымкент ул. Толстого б/н", "geoposition" : "42.320622, 69.620595", "name" : "Шымкентская городская станция скорой медицинской помощи" }, ...
Пример 9: Нечеткий поиск (FuzzySearch).
Параметр fields может принимать наименование нескольких полей, а также "_all", если нужно искать по всем полям.
Параметр fuzziness (редакционное расстояние) по умолчанию равен 2
Более подробную информацию по нечеткому поиску можно найти в официальной документации elasticsearch
Запрос 1:
Данный запрос производит нечеткий поиск слова по всем полям в заданном наборе данных.
/api/v4/medorg/v1?source={ "size":2, "query": { "fuzzy_like_this" : { "fields" : ["_all"], "like_text" : "Астни" } } }
Ответ 1:
[ { "region" : "Астана", "id" : 845, "address" : "ул.Сарыарка", "geoposition" : "51.076148, 71.424524", "name" : "ГУ " }, { "region" : "Астана", "id" : 873, "address" : "микрорайон 3", "geoposition" : "51.147495, 71.471863", "name" : "ТОО « АкадемияортопедииАстана»" } ]
Запрос 2: Пример использования параметра fuzziness:
/api/v4/medorg/v1?source={ "size":3, "query": { "fuzzy_like_this" : { "fields" : ["region"], "like_text" : "Астани", "fuzziness" : "1" } } }
Ответ 2:
[ { "region" : "Астана", "id" : 820, "address" : "ул. Т. Рыскулова,8", "geoposition" : "51.083505, 71.413128", "name" : "Центр семейного здоровья «Шипагер»" }, { "region" : "Астана", "id" : 865, "address" : "ул. Жибек жолы,76", "geoposition" : "51.179823, 71.419469", "name" : "ТОО «ФрезениусМедикалКейрКазахстан»" }, { "region" : "Астана", "id" : 817, "address" : "ул. Абылайхана,30", "geoposition" : "51.128850, 71.461773", "name" : "ЦПМСМ " } ]
Пример 10: Нечеткий поиск (FuzzySearch) в комбинации с поиском по геолокации.
Производится поиск объектов, содержащиx слова с редакционным расстоянием (fuzziness) 2 от слова "Астани" по всем полям. Ответ предоставляется в виде списка объектов отсортированного по удаленности от координат (51.168803, 71.444856) в поле geoposition
/api/v4/medorg/v1?source={ "size":100, "query": { "fuzzy_like_this" : { "fields" : ["_all"], "like_text" : "Астани" } }, "sort": [{ "_geo_distance": { "geoposition": { "lat": 51.168803, "lon": 71.444856 }, "order": "asc", "unit": "km" } }] }
Ответ:
[ { "region" : "Астана", "id" : 836, "address" : "ул. Кенесары 82", "geoposition" : "51.167188, 71.441343", "name" : "ТОО " }, { "region" : "Астана", "id" : 815, "address" : "ул. Сембинова,4/1", "geoposition" : "51.166105, 71.448100", "name" : "ГКП на ПХВ «Городская поликлиника №8»" },
...
Detailed Api
Описание Detailed Api
Данные запросы позволят получить подробную информацию по наборам данных
/api/detailed/dataset?source={Query in Json Object}
/api/detailed/dataset/version?source={Query in Json Object}
Указанный запрос осуществяет поиск по набору данных dataset. Параметр source описывает как производить поиск и фильтрацию.
version является необязательным параметром
Ответ сервера возвращается в формате JSON. Он содержит выборку данных или сообщение об ошибке
Ниже представлены примеры запросов.
Пример 1:
Получение подробной выборки из каталога аптек:
Запрос выглядит следующим образом:
/api/detailed/pharmacy/v1
Ответ:
{ "totalCount" : 56, //Жалпы объектілер саны "data" : [ { //Объектілер ауқымы "_index" : "pharmacy", //Деректер жиынының индексі "_type" : "v1", //Деректер жиынының нұсқасы "_id" : "28", //Бірегеу сәйкестендіргіш "id" : 28, "Name" : "Гиппократ № 30", "Region" : 17108, "geoposition" : "51.169886,71.436908", "Address" : "г. Астана, ул. Абая д.59" }, ...Пример 2:
Также возможно производить агрегацию по полям набора. Подробности можно найти в официальной документации elasticsearch.
Получить коэффициент качества знаний за 2012-2013 учебный год:
Запрос выглядит следующим образом:
/api/detailed/sch_rating/data?source={ "aggs" : { "average_quality" : { "avg" : { "field" : "KnowledgeQuality20122013" } } } }Ответ:
{ "totalCount": 70, "data": [ { "UNTresults": "89.05", "СonformityLevel": "1 из 1", "KnowledgeQuality20122013": "62.3", "_index": "sch_rating", "FullName": "№17 школа-гимназия", "_type": "data", "ID": "16", "_id": "16" }, ... "aggregations": { "average_quality": { "value": 55.2250723907913 //Cредний коэффициент качества образования } } }
Мета информация
Данные запросы позволяют пользователям извлекать мета информацию по интересующим их наборам.
/meta/dataset/version
Данный запрос показывает мета информацию по набору данных dataset и версии version.
Ответ сервера возвращается в формате JSON. Он содержит объект или сообщение об ошибке.
Ниже показан пример запроса.
Пример:
Получить метаинформацию по набору данных Апитеки:
Запрос выглядит следующим образом:
/meta/pharmacy/v1
Ответ:
{ "apiUri" : "pharmacy" "nameRu" : "Аптеки", "nameEn" : "Pharmacy", "nameKk" : "Дәріханалар", "descriptionRu" : "Данный набор содержит наименования аптек, коды ...", "descriptionEn" : "This set contains names of pharmacies, codes of ...", "descriptionKk" : "Осы жиынтық дәріханалар, өңірлер кодтары мен ...", "responsible" : { "phone" : "+7 123 456 78 90", "phone" : "test@test.kz", "fullnameKk" : "Дәріханалар", "fullnameEn" : "Pharmacy", "fullnameRu" : "Аптеки" }, "createdDate" : "2015-01-05T13:53:19.702Z", "modifiedDate" : "2015-01-05T13:53:19.702Z", "fields" : { "id" : { "labelKk" : "Id", "labelEn" : "Id", "type" : "Int", "labelRu" : "Id" }, "Name" : { "labelKk" : "Name", "labelEn" : "Name", "type" : "String", "labelRu" : "Name" }, "Region" : { "labelKk" : "Region", "labelEn" : "Region", "type" : "Int", "labelRu" : "Region" }, "geoposition" : { "labelKk" : "Geoposition", "labelEn" : "Geoposition", "type" : "Geoposition", "labelRu" : "Geoposition" }, "Address" : { "labelKk" : "Address", "labelEn" : "Address", "type" : "String", "labelRu" : "Address" } } }