Использование веб-сервисов

Содержание

Слайд 2

Данные в Веб

Так как технология HTTP (запрос/ответ) хорошо поддерживается, возникает возмжность обмена

Данные в Веб Так как технология HTTP (запрос/ответ) хорошо поддерживается, возникает возмжность
данными между программами, использующими эти протоколы
Необходимо было придумать согласованный способ представления данных, передаваемых между приложениями и по сети
Обычно используются два формата: XML и JSON

Слайд 3

Передача данных по «сети»

PHP
массив

Также известный как «Проводной протокол передачи данных» — то,

Передача данных по «сети» PHP массив Также известный как «Проводной протокол передачи
что мы отправляем по сети («по проводам»)

JavaScript
Объект

Java
Хешмап

Пайтон
Словарь

{
"имя" : «Alex",
"телефон" : «123-4566"
}

Слайд 4

Соглашения по формату передачи

Пайтон
Словарь

Java
Хешмап

Сериализовать



Alex


123 4566


Десериализовать

XML

Соглашения по формату передачи Пайтон Словарь Java Хешмап Сериализовать Alex 123 4566 Десериализовать XML

Слайд 5

Соглашения по формату передачи

Пайтон
Словарь

Java
Хешмап

{
"имя" : “Alex",
"телефон" : “123-4566"
}

JSON

Сериализовать

Десериализовать

Соглашения по формату передачи Пайтон Словарь Java Хешмап { "имя" : “Alex",

Слайд 6

XML

Разметка данных для отправки по сети…

https://ru.wikipedia.org/wiki/XML

XML Разметка данных для отправки по сети… https://ru.wikipedia.org/wiki/XML

Слайд 7

XML-элементы (Ноды)

Простой элемент
Сложный элемент



Alex
123 4566


Jon
622

XML-элементы (Ноды) Простой элемент Сложный элемент Alex 123 4566 Jon 622 7421
7421


Слайд 8

Расширяемый язык разметки (XML)

Основная цель — помочь информационным системам обмениваться структурированными данными
Появился

Расширяемый язык разметки (XML) Основная цель — помочь информационным системам обмениваться структурированными
как подмножество Стандартного обобщенного языка разметки (англ. SGML) и разработан так, чтобы быть понятным человеку

https://ru.wikipedia.org/wiki/XML

Слайд 9

Основы XML

Начальный тег
Закрывающий тег
Текстовый контент
Атрибут
Самозакрывающийся тег


Alex

+375293287564

Основы XML Начальный тег Закрывающий тег Текстовый контент Атрибут Самозакрывающийся тег Alex +375293287564
hide="yes" />

Слайд 10

Пробелы


Alex

+375 29 4534785




Alex

Пробелы Alex +375 29 4534785 Alex +375 29 4534785 Концы строк не
+375 29 4534785


Концы строк не имеют значения. Пробелы в текстовых элементах обычно отбрасываются.
Мы делаем отступ только для удобства чтения

Слайд 11

XML-терминология

Теги обозначают начало и конец элемента
Атрибуты — Пары Ключевое слово/Значение в открывающем

XML-терминология Теги обозначают начало и конец элемента Атрибуты — Пары Ключевое слово/Значение
теге XML
Сериализовать / Десериализовать — преобразовать данные программы в общий формат, который может храниться и/или передаваться между системами независимо от языка программирования

https://ru.wikipedia.org/wiki/Сериализация

Слайд 12

XML в виде дерева


X

Y
Z


Элементы

Текст

XML в виде дерева X Y Z Элементы Текст

Слайд 13

Текст и атрибуты в XML


X

Текст и атрибуты в XML X Y Z a b c X
Y
Z


a

b

c

X

d

e

Y

Z

5

w-атрибут

Текстовая нода

Элементы

Текст

Слайд 14

XML в виде путей


X

Y
Z


/a/b X
/a/c/d Y
/a/c/e

XML в виде путей X Y Z /a/b X /a/c/d Y /a/c/e Z Элементы Текст
Z

Элементы

Текст

Слайд 15

XML-схема

Описание правил, которым должен подчиняться документ

http://en.wikipedia.org/wiki/Xml_schema

http://en.wikibooks.org/wiki/XML_Schema

XML-схема Описание правил, которым должен подчиняться документ http://en.wikipedia.org/wiki/Xml_schema http://en.wikibooks.org/wiki/XML_Schema

Слайд 16

XML-схема

Язык описания структуры XML-документа
Налагает ограничения на структуру и содержимое документа
Часто используется

XML-схема Язык описания структуры XML-документа Налагает ограничения на структуру и содержимое документа
для установления «контракта» между системами: «Моя система будет принимать XML, который соответствует этой конкретной Схеме»
Если конкретный фрагмент XML соответствует Схемe, он считается «подтвержденным»

http://en.wikipedia.org/wiki/Xml_schema

Слайд 17

Валидатор

Договор об
XML-схеме

XML-документ

Валидация XML

Валидатор Договор об XML-схеме XML-документ Валидация XML

Слайд 18

Валидатор


Severance
17
2001-04-17





Валидатор Severance 17 2001-04-17 Договор об XML-схеме XML-документ Валидация XML



Договор об XML-схеме

XML-документ

Валидация XML

Слайд 19

Множество языков XML-схемы

Определение типа документа (англ. DTD)
- https://ru.wikipedia.org/wiki/DTD
Стандартный обобщенный язык разметки (ISO

Множество языков XML-схемы Определение типа документа (англ. DTD) - https://ru.wikipedia.org/wiki/DTD Стандартный обобщенный
8879:1986 SGML)
- https://ru.wikipedia.org/wiki/SGML
XML-схема (W3C) - ( .XSD - расширение файла)
- https://ru.wikipedia.org/wiki/XML_Schema_(W3C)

http://en.wikipedia.org/wiki/Xml_schema

Слайд 20

XSD XML-схема (W3C)

Мы сосредоточимся на версии Консорциума Всемирной паутины (англ.W3C)
Ее часто называют

XSD XML-схема (W3C) Мы сосредоточимся на версии Консорциума Всемирной паутины (англ.W3C) Ее
«W3C-схема», так как «Схема» считается универсальной
Частенько ее называют XSD, так как файл имеет расширение .xsd

http://www.w3.org/XML/Schema

https://ru.wikipedia.org/wiki/XML_Schema_(W3C)

Слайд 21

Структура XSD

xs:element
xs:sequence
xs:complexType





Структура XSD xs:element xs:sequence xs:complexType Petrov 17 2001-04-17
type="xs:date"/>



Petrov
17
2001-04-17

Слайд 22

XSD-ограничения

http://www.w3schools.com/Schema/schema_complex_indicators.asp




minOccurs="1" maxOccurs="1" />

XSD-ограничения http://www.w3schools.com/Schema/schema_complex_indicators.asp minOccurs="1" maxOccurs="1" /> minOccurs="0" maxOccurs="10" /> Ivan Petrov Ivan Vanya Vano Ivanko
name="child_name" type="xs:string"
minOccurs="0" maxOccurs="10" />




Ivan Petrov
Ivan
Vanya
Vano
Ivanko

Слайд 23

Типы данных XSD

http://www.w3schools.com/Schema/schema_dtypes_numeric.asp





Типы данных XSD http://www.w3schools.com/Schema/schema_dtypes_numeric.asp John Smith 2002-09-24 2002-05-30T09:30:10Z 999.50 30 Время обычно
name="weeks" type="xs:integer"/>

John Smith
2002-09-24
2002-05-30T09:30:10Z
999.50
30

Время обычно отображается в формате UTC/GMT, учитывая, что серверы часто разбросаны по всему миру

Слайд 24

ISO 8601 Формат Дата/Время

2002-05-30T09:30:10Z

Год-месяц-день

Время

Часовой пояс обычно указывается в формате UTC / GMT,

ISO 8601 Формат Дата/Время 2002-05-30T09:30:10Z Год-месяц-день Время Часовой пояс обычно указывается в
а не в формате местного часового пояса

https://ru.wikipedia.org/wiki/ISO_8601

https://ru.wikipedia.org/wiki/Всемирное_координированное_время

Слайд 26

http://www.w3schools.com/Schema/schema_example.asp

http://www.w3schools.com/Schema/schema_example.asp

Слайд 27

XMLDemo_1.py

import xml.etree.ElementTree as ET data = ''' Alex +375293452290

XMLDemo_1.py import xml.etree.ElementTree as ET data = ''' Alex +375293452290 ''' tree
hide="yes" /> ''' tree = ET.fromstring(data) print('Имя:', tree.find('name').text) print('Атрибуты:', tree.find('email').get('hide'))

Слайд 28

XMLDemo_2.py

import xml.etree.ElementTree as ET input = ''' 001 Mike

XMLDemo_2.py import xml.etree.ElementTree as ET input = ''' 001 Mike 009 Vlad
009 Vlad '''

stuff = ET.fromstring(input) lst = stuff.findall('users/user') print('User count:', len(lst)) for item in lst: print('Name', item.find('name').text) print('Id', item.find('id').text) print('Attribute', item.get('level’))

Слайд 29

XMLDemo_3.py

Задача. Найти все блюда, содержащие кальций. Данные о блюдах представлены в XML-формате

XMLDemo_3.py Задача. Найти все блюда, содержащие кальций. Данные о блюдах представлены в
version="1.0"?> Avocado Dip Sunnydale 29 11 3 5 210 2 0 1

0 0 0 0

Слайд 30

XMLDemo_3.py

import xml.etree.ElementTree as ET file = open("food.xml", "r") content = file.read() print(content) content = ET.fromstring(content) lst =

XMLDemo_3.py import xml.etree.ElementTree as ET file = open("food.xml", "r") content = file.read()
content.findall('food')

print("Блюда, содержащие кальций:") for item in lst: ca = item.find('minerals/ca').text if item.find('minerals/ca').text != '0': print("Название: ", item.find("name").text, end="") print("Калорийность: ", item.find("calories").get("total"))

Задача. Найти все блюда, содержащие кальций. Данные о блюдах представлены в XML-формате

Слайд 31

Текстовый формат обмена данными (JSON)

Текстовый формат обмена данными (JSON)

Слайд 32

Литеральная нотация объектов в JavaScript

Формат JSON был разработан Дугласом Крокфордом
Литеральная нотация объектов

Литеральная нотация объектов в JavaScript Формат JSON был разработан Дугласом Крокфордом Литеральная
в JavaScript

http://www.youtube.com/watch?v=kc8BAR7SHJI

Слайд 34

JSONDemo_1.py

Формат JSON представляет данные в виде вложенных «списков» и «словарей»

import json data =

JSONDemo_1.py Формат JSON представляет данные в виде вложенных «списков» и «словарей» import
'''{ "name" : "Alex", "phone" : { "type" : "mob", "number" : "+376 29 3287765" }, "email" : { "hide" : "yes" } }''' info = json.loads(data) print('Name:',info["name"]) print('Hide email:',info["email"]["hide"])

Слайд 35

JSONDemo_2.py

Формат JSON представляет данные в виде вложенных «списков» и «словарей»

import json input =

JSONDemo_2.py Формат JSON представляет данные в виде вложенных «списков» и «словарей» import
'''[ { "id" : "001", "x" : "2", "name" : "Alex" } , { "id" : "009", "x" : "7", "name" : "Vlad" } ]''' info = json.loads(input) print('User count:', len(info)) for item in info: print('Name', item['name']) print('Id', item['id']) print('Attribute', item['x'])

Слайд 36

Сервис-ориентированный подход

https://ru.wikipedia.org/wiki/Сервис-ориентированная_архитектура

Сервис-ориентированный подход https://ru.wikipedia.org/wiki/Сервис-ориентированная_архитектура

Слайд 37

Сервис-ориентированный подход

Большинство приложений используют сервисы
Используются сервисы из других приложений:
- Сервис оплаты по

Сервис-ориентированный подход Большинство приложений используют сервисы Используются сервисы из других приложений: -
кредитной карте;
- Системы бронирования отелей.
Сервисы публикуют «правила», которым приложения должны следовать, чтобы использовать данный сервис (API)

Приложение

APIs

Сервис

Сервис

Слайд 38

Программный интерфейс приложения (API)

https://ru.wikipedia.org/wiki/API

Text

API определяет интерфейс и поведение объектов в этом интерфейсе,

Программный интерфейс приложения (API) https://ru.wikipedia.org/wiki/API Text API определяет интерфейс и поведение объектов
но при этом позволяет абстрагироваться от того, как именно эта функциональность будет реализована.
Программное обеспечение, которое предоставляет функциональность, описываемую в API, называется «реализация» API. Обычно API определяется в терминах языка программирования, используемого при создании приложения

Слайд 39

https://developers.google.com/maps/documentation/geocoding/

https://developers.google.com/maps/documentation/geocoding/

Слайд 40

{
"status": "OK",
"results": [
{
"geometry": {
"location_type": "APPROXIMATE",
"location": {

{ "status": "OK", "results": [ { "geometry": { "location_type": "APPROXIMATE", "location": {
"lat": 42.2808256,
"lng": -83.7430378
}
},
"address_components": [
{
"long_name": "Ann Arbor",
"types": [
"locality",
"political"
],
"short_name": "Ann Arbor"
}
],
"formatted_address": "Ann Arbor, MI, USA",
"types": [
"locality",
"political"
]
}
]
}

http://maps.googleapis.com/maps/api/geocode/json?address=Ann+Arbor%2C+MI

Слайд 41

API-безопасность и ограничение на количество обращений

Вычислительные ресурсы для запуска этих API являются

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

Слайд 42

Не более 100,000 запросов в день для бизнес-клиентов

Ограничения по использованию

2,500 запросов в

Не более 100,000 запросов в день для бизнес-клиентов Ограничения по использованию 2,500 запросов в день
день

Слайд 46

Задача. Узнать погоду в городе и запросит прогноз на ближайшие дни, используя

Задача. Узнать погоду в городе и запросит прогноз на ближайшие дни, используя
API сервиса OpenMeatherMap.org

import requests # id, полученный при регистрации на OpenWeatherMap.org. appid = "908f7745f7066f579da091f54d6bac78" # Проверка наличия в базе информации о нужном населенном пункте def get_city_id(s_city_name): res = requests.get("http://api.openweathermap.org/data/2.5/find", params={'q': s_city_name, 'type': 'like', 'units': 'metric', 'lang': 'ru', 'APPID': appid}) data = res.json() cities = ["{} ({})".format(d['name'], d['sys']['country']) for d in data['list']] print("city:", cities) city_id = data['list'][0]['id'] print('city_id=', city_id) return city_id

Слайд 47

Задача. Узнать погоду в городе и запросит прогноз на ближайшие дни, используя

Задача. Узнать погоду в городе и запросит прогноз на ближайшие дни, используя
API сервиса OpenMeatherMap.org

# Запрос текущей погоды def request_current_weather(city_id): res = requests.get("http://api.openweathermap.org/data/2.5/weather", params={'id': city_id, 'units': 'metric', 'lang': 'ru', 'APPID': appid}) data = res.json() print("Погоденые условия:", data['weather'][0]['description']) print("Температуры:", data['main']['temp']) print("Min:", data['main']['temp_min']) print("Max:", data['main']['temp_max']) print("Влажность:", data['main']['humidity']) print("Все данные о погоде на сегодня") print("data:", data)

Слайд 48

Задача. Узнать погоду в городе и запросит прогноз на ближайшие дни, используя

Задача. Узнать погоду в городе и запросит прогноз на ближайшие дни, используя
API сервиса OpenMeatherMap.org

# Запрос прогноза погоды на ближайшее время def request_forecast(city_id): res = requests.get("http://api.openweathermap.org/data/2.5/forecast", params={'id': city_id, 'units': 'metric', 'lang': 'ru', 'APPID': appid}) data = res.json() print('city:', data['city']['name'], data['city']['country']) for i in data['list']: print((i['dt_txt'])[:16], '{0:+3.0f}'.format(i['main']['temp']), '{0:2.0f}'.format(i['wind']['speed']) + " м/с", i['weather'][0]['description'])