Использование данных во внешних приложениях (API)



Мы поможем в написании ваших работ!


Мы поможем в написании ваших работ!



Мы поможем в написании ваших работ!


ЗНАЕТЕ ЛИ ВЫ?

Использование данных во внешних приложениях (API)



Открытые данные не обязательно скачивать: их можно запрашивать небольшими порциями прямо с сайта публикатора, или с портала. Например, данных может быть слишком много. В картах OpenStreetMap их полтерабайта: зачем скачивать все, когда нужны только остановки в своём городе? Даже небольшой набор проще получить уже отфильтрованным, чем писать для этого специальные программы.

Такой способ получения данных называется API, программный интерфейс. Поищите его на порталах с открытыми данными: наличие API показывает уровень развития портала. Разумеется, его предоставляют порталы государства и Москвы. К API прилагается инструкция по использованию: это правила построения веб-адресов, описание параметров запроса. Веб-адрес, URL, состоит из адреса сайта (например, data.gov.ru) и, после вопросительного знака, параметров запроса, разделённых амперсандом: например, start=0&count=10. Чаще всего допустимые параметры ограничиваются разбиением на страницы: в предыдущем примере мы получаем первую страницу из 10 элементов.

Хороший пример простого API с примерами, которые можно копировать со страницы в новое окно браузера и смотреть, что получается, если на сайте API портала открытых данных правительства Москвы.

Существует один стандарт на запросы к данным, Open Data Protocol (сокращённо OData). Он определяет, как получить записи базы данных, как получить метаинформацию, и как изменять эту базу (что, конечно, в порталах открытых данных не позволено). Общение там начинается с запроса доллар-metadata (/$metadata), который возвращает описание базы в формате XML. Структура базы почти всегда проста: набор таблицы, в каждой свой набор полей разных типов, и есть перекрёстные связи: например, вида один-ко-многим.

Дальше довольно просто: например, чтобы получить все строки таблицы «People», нужно запросить адрес «/People». Чтобы запросить одну запись по идентификатору, его нужно указать в скобках (например, «/People('ivanpetrov')»). Можно даже запросить одно поле одно записи, указав дальше его название после слэша. Далее, в параметрах запроса можно указать один или несколько фильтров, название которых начинается с доллара: orderby для сортировки, top и skip для разбивки на страницы, select для ограничения набора колонок, и самый мощный — filter, для фильтрации возвращаемых данных.

Подробно о формате запросов написано на сайте odata.org, с примерами и ссылками на интерфейсы к открытым данным, на которых можно потренироваться. Там же есть веб-инструменты для изучения структуры данных на других порталах. Порталы открытых данных, поддерижвающие этот интерфейс, обычно предлагают свои инструкции. Должен сказать, я не нашёл русских порталов, целиком поддерживающих OData, но интерфейсы порталов Москвы, Краснодара, Вологодской области поддерживают некоторые его элементы.

Зачем могут пригодиться данные, полученные через API? Например, для автоматической проверки изменений: допустим, у нас есть набор аптек на всю Москву, и мы хотим узнать, когда появится или закроется аптека в нашем районе. Можно скачать весь набор и напрограммировать скрипт для проверки. А можно составить запрос к порталу, который выдаёт только нужные аптеки, и банально смотреть, не изменяется ли со временем полученный набор.

И тут обязательно нужно предупредить: серверы не резиновые. Когда вы скачиваете данные, вы общаетесь с сервером один раз. Он просто пересылает вам заранее подготовленный файл, не тратя вычислительных ресурсов. А если автоматизировать запросы к API — например, случайно сделав слишком короткий интервал в примере про аптеки, — то можно создать постоянную и затратную по ресурсам нагрузку на сервер. Ведь ему каждый раз придётся обрабатывать параметры запроса, копаться в базе данных, подготавливать ответ.

И ладно, если база небольшая, а интервал не чаще секунды. Очень легко случайно сломать сервер, владея посещаемым сайтом. Например, на вашем сайте есть карта, и вы отображаете на ней аптеки. Вы можете хранить этот набор данных у себя, а можете, в целях актуальности, брать данные при каждом запросе напрямую с портала открытых данных. Всего лишь запрос по координатам, ничего сложного. Публикуете новую функциональность, и сотни пользователей в секунду начинают загружать и прокручивать карту, рассматривая свой район. Сервер получает несколько сотен запросов в секунду, обнаруживает, что фильтр по координатам не слишком эффективно написан, и умирает под нагрузкой.

Короче, будьте внимательны при автоматизированном использовании чужих API. Чаще всего оказывается лучше скачать весь массив данных, если он есть, или организовать кэширование, когда промежуточные результаты хранятся на вашем сервере, разгружая чужой.

Чтобы узнать про ограничения, свяжитесь с владельцем API. В любом случае, если мысль про ограничения появилась, значит, вы можете на них напороться. Найдите точку контакта: телефон, e-mail, — и позвоните или напишите. Иногда владельцы предлагают платные варианты получения данных с большими лимитами или дополнительными возможностями.

На русских порталах открытых данных редко встречаются полезные интерфейсы API. Но когда разные наборы содержат однотипные данные (например, на научных порталах), или когда набор слишком велик для прямой обработки (карты или википедия), API при наличии минимального умения программировать позволяет получить необходимую информацию значительно быстрее, чем скачивание и обработка файла.

 



Последнее изменение этой страницы: 2016-12-27; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 44.192.254.246 (0.014 с.)