# Веб-сервис (WS - Web service)

Веб-служба, веб-сервис (англ. web service) - идентифицируемая уникальным веб-адресом (URL-адресом) программная система со стандартизированными интерфейсами. Веб-службы могут взаимодействовать друг с другом и со сторонними приложениями посредством сообщений, основанных на определённых протоколах (SOAP, XML-RPC и т. д.) и соглашениях (REST). Веб-служба является единицей модульности при использовании сервис-ориентированной архитектуры приложения (SOA).

В обиходе веб-сервисами называют услуги, оказываемые в Интернете. В этом употреблении термин требует уточнения, идет ли речь о поиске, веб-почте, хранении документов, файлов, закладок и т. п. Такими веб-сервисами можно пользоваться независимо от компьютера, браузера или места доступа в Интернет/

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

По сути, веб-сервисы - это реализация абсолютно четких интерфейсов обмена данными между различными приложениями, которые написаны не только на разных языках, но и распределены на разных узлах сети.

**Архитектура**

![https://upload.wikimedia.org/wikipedia/commons/thumb/4/4a/Webservices-ru.svg/1416px-Webservices-ru.svg.png](https://upload.wikimedia.org/wikipedia/commons/thumb/4/4a/Webservices-ru.svg/1416px-Webservices-ru.svg.png)

Как показано на рисунке, можно выделить три инстанции, взаимодействующие в рамках веб-службы. Переведем их названия как:

* заказчик (service requester);
* исполнитель (service provider);
* каталог (service broker).

Когда служба разработана, исполнитель регистрирует ее в каталоге, где её могут найти потенциальные заказчики. Заказчик, найдя в каталоге подходящую службу, импортирует оттуда её WSDL-спецификацию и разрабатывает в соответствии с ней своё программное обеспечение. WSDL описывает формат запросов и ответов, которыми обмениваются заказчик и исполнитель в процессе работы.

Для обеспечения взаимодействия используются следующие стандарты/протоколы:

* SOAP (Simple Object Access Protocol) - по сути это тройка стандартов SOAP/WSDL/UDDI;
* REST (Representational State Transfer) - архитектурный стиль взаимодействия компьютерных систем в сети основанный на методах протокола HTTP;
* UDDI - устарел;
* XML-RPC (XML Remote Procedure Call) - устарел;
* JSON-RPC (JSON Remote Procedure Call) - более современный аналог XML-RPC. Основное отличие - данные передаются в формате JSON;
* Специализированные протоколы для конкретного вида задач, такие как GraphQL;
* Менее распространенный, но более эффективный gRPC, передающий данные в бинарном виде и использующий HTTP/2 в качестве транспорта.

На самом деле, SOAP произошел от XML-RPC и является следующей ступенью его развития. В то время как REST - это концепция, в основе которой лежит скорее архитектурный стиль, нежели новая технология, основанный на теории манипуляции объектами CRUD (Create Read Update Delete) в контексте концепций [WWW](http://WWW).

**Отличие сервиса от сервера**

Сервис (микросервис) - это программа, размещаемая на сервере, которая предоставляет определенную функцию, находясь по определенному адресу и используя четко определенные интерфейсы и логику. Сегодня это чаще всего интерфейсы API.

Сервер может хостить в себе тысячи сервисов. Впрочем, и один сервис может быть размещен на нескольких серверах. В более широком плане - сервер - это виртуальная машина, которая хостит в себе Apache, IIS и много-много web-сервисов. Еще в более широком плане - это железяка, которая хостит в себе множество виртуалок.

Источники:

* [Веб-служба](https://ru.wikipedia.org/wiki/%D0%92%D0%B5%D0%B1-%D1%81%D0%BB%D1%83%D0%B6%D0%B1%D0%B0)

Доп. материал:

* [Веб-сервисы](https://gist.github.com/vchernogorov/81da656048875132d6963304d449f770)
* [W3C Web Services](http://www.w3.org/2002/ws/)
* [Тестировщик с нуля / Урок 17. Тестирование веб-сервисов. SOAP и XML, REST и JSON для тестировщика](https://www.youtube.com/watch?v=_cfmDnIIQTU)
* [Message broker](https://en.wikipedia.org/wiki/Message_broker)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://vladislaveremeev.gitbook.io/qa_bible/seti-i-okolo-nikh/veb-servis-ws-web-service.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
