Web сервисы. JSON и XML
Согласно википедии веб-сервис (англ. web service) – идентифицируемая веб-адресом программная система со стандартизированным интерфейсом.
В обиходе веб-сервисами называют услуги, оказываемые в Интернете. В этом употреблении термин требует уточнения, идёт ли речь о поиске, почте, хранении документов, файлов, закладок и т. п. Такими веб-сервисами можно пользоваться независимо от компьютера, браузера или места доступа в Интернет.
Обычно веб-сервисы работают поверх протокола HTTP или протокола более высокого уровня. Веб-сервис — просто адрес, ссылка, обращение к которому позволяет получить данные или выполнить действие.
Чтобы понять для как работают веб-сервисы стоит для начала составить представление о работе интернета в целом.
Интернет, как и любая другая сеть построена на принципе запрос-ответ. Клиент отправляет запрос на сервер, он его обрабатывает и затем даёт ответ клиенту.
Изначально интернет состоял только из обычных html страниц и по современным меркам выглядел крайне скромно. Но со временем появилось огромное множество различных языков программирования и протоколов, работающих по верх стандартного html.
Поэтому появилась необходимость как-то стандартизировать клиент-серверное взаимодействие вне зависимости от используемых устройств и языков программирования. Эту проблему как раз и решают веб-сервисы. Они реализуют четкий интерфейс для обмена данными между различными приложениями, которые могут быть установлены на различных устройствах.
Примеров клиент-серверного взаимодействия в повседневной жизни достаточно много. Возьмем обычный поход в магазин. Покупателю нужно прийти в какой-либо магазин, взять товары и оплатить. Продавцу же нужно выгрузить товары на полки и вести учет проданного. Кроме этого, существую различные акции, которые время от времени меняются. На практике продавец для учета товаров чаще всего работает с локальной базой данных, то есть на компьютерах в магазине хранится список всех товаров и покупок. Покупателю же ещё проще и его дело просто прийти, купить и уйти.
Сейчас мы говорили о физическом магазине, но если перейдем в интернет, то тут тоже есть онлайн магазины. В них есть точно такие же операции, но устроены они уже по-другому. База данный в этом случае находится уже на удаленном сервере и для её изменения нужно обращаться к ней через специальные программы. Но благодаря веб сервисам работа с учетом товаров может быть реализована прямо через браузер. Точно также происходит и с покупкой товара покупателем. Веб сервисы предоставляют им обоим набор определенных функций, которые могут выполняться на стороне сервера, а вызываются они просто в браузере.
Такая система очень упрощает создание новых веб-приложений и сайтов, так как можно не задумываться о поддержке сразу множества устройств, а реализовать универсальное решение сразу для всех.
Веб-сервисы чаще всего используются для:
- Решения повторяющихся изо дня в день операций (поисковые запросы, посмотреть пробки)
- Решения вопроса несовместимости данных приложений, если, например, приложения написаны на разных языках.
- Для обеспечения кроссплатформенности.
Для работы веб-сервисы чаще всего используют XML или JSON.
XML – аббревиатура от англ. eXtensible Markup Language (пер. расширяемый язык разметки). Его синтаксис похож на язык веб разметки HTML, но отличается тем, что является самоопределяемым, то есть в нем почти нет предопределённых тегов. Поэтому он используется не для отображения данных, а для их хранения.
Один из протоколов передачи данными между сервисами является SOAP (от англ. Simple Object Access Protocol — простой протокол доступа к объектам) — протокол обмена структурированными сообщениями в распределённой вычислительной среде. Протокол используется для обмена произвольными сообщениями в формате XML, а также для вызова процедур.
Его особенности:
- SOAP рекомендован W3C (англ. World Wide Web Consortium, W3C) – организация, разрабатывающая и внедряющая технологические стандарты для Всемирной паутины).
- Собственный формат отправки сообщений.
- Гибок
- Широкая поддержка в продуктах Microsoft.
Существенный недостаток этого протокола — это большой объем передаваемых данных и сложность чтения этих данных из-за большого количества тегов.
Пример SOAP запроса:
Пример SOAP ответа:
Любой SOAP запрос должен состоять из четырех частей:
- SOAP Envelope Element – Обязательный элемент SOAP Envelope является корневым элементом сообщения SOAP. Этот элемент определяет документ XML как сообщение SOAP.
- Header – необязательный элемент — заголовок. Как и в других протоколах, блоки заголовка должны содержать информацию, оказывающую влияние на обработку полезной информации. Таким образом, это подходящее место для размещения чего-то, вроде элемента credentials, который помогает контролировать доступ к операции
- Body – основной элемент, содержит основную информацию сообщения. Обязательный.
- Fault – элемент, содержащий информацию об ошибках, возникающих в процессе обработки сообщения. Необязательный.
Другим широко используемым способом настройки веб-сервисов является REST.
REST (сокр. от англ. Representational State Transfer — «передача состояния представления») — архитектурный стиль взаимодействия компонентов распределённого приложения в сети.
В отличие от SOAP, REST не подкреплен официальным стандартом. Фактически, он основывается на соглашениях. Веб-сервис, построенный с учетом всех требований и ограничений архитектурного стиля, можно назвать RESTful веб-сервисом.
REST не использует конвертацию данных при передаче, данные передаются в исходном виде — это снижает нагрузку на клиент веб-сервиса, но увеличивает нагрузку на сеть. Управление данными происходит с помощью методов HTTP:
- GET — получить данные;
- POST — добавить данные;
- PUT — изменить данные;
- DELETE — удалить данные.
Использование этих методов позволяет реализовать типичный CRUD (Create/Read/Update/Delete) для любой информации. Но это лишь соглашение: часто используются только 2 метода: GET для получения и POST для всего остального. Разобраться поможет такое понятие, как REST-Patterns. Паттерны связывают HTTP методы с тем, что они делают.
Особенности REST:
- Клиент-серверная архитектура
- Не имеет состояния (сервер не сохраняет состояния клиента)
- Использование кэша (ответ сервера может быть кэширован)
- Многоуровневая архитектура
- Единый интерфейс (к примеру для получения каталог товаров вы используете URL вида: http://site.com/v1/catalog, а для получения информации о конкретном товаре URL будет: http://site.com/v1/catalog /10)
Пример REST запроса:
Пример REST ответа:
Вопрос “Какой способ реализации использовать?” необходимо рассматривать в контексте реализуемой системы и ее ограничений. Обычно, SOAP используется в крупных корпоративных системах со сложной логикой, когда требуются четкие стандарты, подкрепленные временем. XML-RPC, пожалуй, устарел и не имеет смысла ввиду наличия собрата JSON-RPC. RPC-протоколы подойдут для совсем простых систем с малым количеством единиц информации и API-методов.
Если же вы разрабатываете публичное API и логика взаимодействия во многом покрывается четверкой методов CRUD — смело выбирайте REST. Он наиболее популярен в WEB. Яндекс, Google и другие используют именно его для своего API.