О веб-сервисах

Обзор веб-сервисов

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

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

Все схемы веб-сервиса используют веб-способ транспортировки, такой как HTTP, HTTPS, или SMTP и метод для упаковки запросов и ответов, обычно своего рода XML-схема.

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

Типы веб-сервисов

Самые ранние реализации веб-сервисов реализовали APIs, близко напомнивший вызовы функции на существующих языках программирования, таких как C или Java. Их вызывают удаленными процедурными вызовами (RPC). Стандарт W3C был установлен для обеспечения веб-сервисов с помощью основанного на XML RPC, названного XML-RPC. Клиентские веб-сервисы доступа через XML-RPC путем вызова серии удаленных функций, выполняющихся на сервере. Параметры передаются и возвращаются в предопределенном порядке. Для использования служб XML-RPC необходимо знать URL службы, функции, представленные, и тип данных и порядок параметров, которые будут отправлены и получены.

Более высокий уровень, больше объектно-ориентированного подхода было позже разработано названное архитектурой для обслуживания широкого круга запросов. Самой популярной реализацией этого подхода является SOAP (раньше Простой протокол доступа к объектам). В этом подходе к веб-сервисам клиент и сервер обменивается сообщениями, вместо того, чтобы сделать звонки и ожидать возвраты. Это обеспечивает более слабо связанный интерфейс и менее связывается к определенным языкам. Реализации SOAP чрезвычайно распространены. Параметры SOAP называют, а не отправляют и получают в предопределенном порядке, сделав звонки SOAP, проще считать и отладить. Для использования служб SOAP необходимо знать URL службы, методы, представленные, и имена и типы данных параметров сообщения.

В еще более высоком уровне существует определение для Языка описания веб-сервисов (WSDL). Это определяет тип XML-документа, описывающий доступные веб-сервисы. WSDL часто привык в сочетании с SOAP к службам доступа по Интернету. Клиентская программа подключает к удаленному серверу и читает файл WSDL для определения, какие удаленные службы доступны, включая список операций, параметров и типов данных. Клиент может тогда использовать SOAP для вызова операций, перечисленных в файле WSDL.

Если служба SOAP описана в файле WSDL, Вам не нужна никакая существующая ранее информация для доступа к службе кроме URL файла WSDL.

В настоящее время OS X не предоставляет высокоуровневой поддержки для извлечения функций SOAP от файлов WSDL. Можно использовать NSXMLParser считать файл WSDL в память от URL, как бы то ни было. Тогда относительно просто искать файл определенное имя метода или счесть URL связанным со службой. С немного большим усилием можно извлечь имена методов, типы данных и названия параметра для создания вызова SOAP. Можно тогда использовать платформу Ядра Веб-сервисов, чтобы выполнить вызовы SOAP и проанализировать ответы.

Архитектура веб-сервисов OS X

OS X имеет высокоуровневую поддержку SOAP и XML-RPC, а также низкоуровневую поддержку XML и HTTP, позволяющего Вам получать доступ к другим реализациям и схемам. Архитектура проиллюстрирована на рисунке 1-1.

  XML-RPC рисунка 1-1 и кодировки SOAP поверх XML поверх HTTP
XML-RPC and SOAP encodings on top of XML on top of HTTP

Можно сделать SOAP или XML-ВЫЗОВЫ-RPC непосредственно от AppleScript или из процедурных приложений C или Какао. Можно выполнить эти вызовы с помощью или событий Apple или платформы Ядра Веб-сервисов.

Ядро Веб-сервисов является низкоуровневой платформой, находящейся рядом с CFNetwork, Базовой Основой, и Ядром Углерода, подплатформой Core Services, как показано на рисунке 1-2. Это доступно всем приложениям, плагинам, инструментам и демонам.

  Платформа Ядра Веб-сервисов рисунка 1-2
Web Services Core framework layer

Платформа не имеет никакой зависимости от сервера окна или окна входа в систему. Это полностью интегрируется с системой OS X, находящейся в Core Services, и эффективно использует CFXMLParser и CFNetwork. Платформа ориентирована на многопотоковое исполнение и на основе цикла выполнения.

О веб-сервисах API

Использовать ли ли XML-RPC или SOAP, Вы используете Ядро Веб-сервисов API для создания вызова к серверу по существу тем же способом:

  1. Создайте словарь, содержащий URL сервера, имя работы и постоянное указание протокола (XML-RPC, SOAP 1.1 или SOAP 1.2).

  2. Создайте вызов метода касательно использования WSMethodInvocationCreate, передача в словаре.

  3. Создайте словарь, содержащий параметры метода и их имена и другой словарь, указывающий их порядок.

  4. Передайте эти два словаря в вызов касательно использования WSMethodInvocationSetParameters.

  5. Передайте любые дополнительные настройки, такие как заголовки действия SOAP и отладьте флаги в вызов касательно использования вызовов к WSMethodInvocationSetPropery.

  6. Создайте обратный вызов, чтобы обработать ответ и передать его в вызов касательно использования WSMethodInvocationSetCallback. Этот обратный вызов анализирует словарь, содержащий CFTypes, десериализованный от ответа.

  7. Вызовите использование процедуры WSMethodInvocationInvoke или WSMethodInvocationScheduleWithRunLoop.

  8. Проверьте состояние HTML на запрос аутентификации или сетевые ошибки, аутентифицируя при необходимости.

Веб-сервисы API призывают Вас асинхронно выпускать запросы вызова по циклу выполнения и получать ответ на Ваш пакет. Поскольку это является находящимся в CFType, необходимо создать объекты CFType для строк, записей, словарей и массивов. Если Вы - программист Objective C, Вы получаете «бесплатное» образование моста с типами Objective C.

Простые типы данных могут быть сериализированы и десериализовали использование встроенных возможностей вызова метода. Если Вы должны, можно вызвать пользовательский сериализатор или deserializer, чтобы преобразовать более сложные исходящие данные в XML или извлечь данные из возвращенного XML. Использовать WSMethodInvocationAddSerializationOverride или WSMethodInvocationAddDeserializationOverride добавить пользовательский сериализатор или deserializer.

Можно указать, что словарь ответа должен содержать необработанный XML, отправленный и/или возвратившийся для помощи в десериализации или отлаживающий использование WSMethodInvocationSetPropery.

Типы, вызовы метода и обработчики протокола

Платформа ядра веб-сервисов состоит из трех заголовочных файлов: WSTypes.h, WSMethodInvocation.h, и WSProtocolHandler.h.

Типы

WSTypes.h содержит коды ошибки и вводит уникальный для платформы веб-сервисов, и также включает много типов веб-сервисов, соответствующих базовым типам основы, такой как eWSNullType, eWSBooleanType, eWSIntegerType, и т.д.

Поскольку CFTypes определяются во время выполнения, не всегда возможно произвести статическое отображение между Базовыми типами Основы, и соответствие сериализировало типы XML, используемые для взаимодействия с удаленными серверами. То, что это означает, - то, что при преобразовании между сериализированными данными XML и десериализованным CFTypes, необходимо сделать преобразование от WSTypes до CFTypes, и наоборот. Перечисление WSTypes, объединенного с API для преобразования между CFTypes и WSTypes, может также быть найдено в WSTypes.h.

Вызовы метода

WSMethodInvocation.h обеспечивает основную клиентскую сторону API, описанный всюду по этому документу: создание ссылки вызова, установка параметров, вызов удаленных операций и парсинг ответов.

Обработчики протокола

WSProtocolHandler.h содержит API для преобразования между словарями и сообщениями XML, не вызывая веб-сервисы. Можно использовать это для поддержки или клиентской стороны или операций серверной стороны.

Фундаментальный объект WSProtocolHandler API WSProtocolHandlerRef. Это ссылается на объект, переводящий словари в запрос веб-сервисов или сообщение XML в словарь. Как правило, это используется для реализации серверной стороны веб-сервиса путем преобразования, получил XML в базовые типы основы, но можно использовать обработчика протокола API, чтобы сериализировать и десериализовать данные до, после, или вместо того, чтобы вызвать работу для операций клиентской стороны также.

Используя определенные типы веб-сервиса

Можно использовать платформу Ядра Веб-сервисов для доступа к XML-RPC или основанным на SOAP веб-сервисам. К службам SOAP или XML-RPC доступа начиная с документа WSDL необходимо сначала проанализировать документ WSDL, пользующийся библиотекой OS X XML (NSXML... функции). В большинстве случаев можно тогда вызвать описанную службу с помощью платформы Ядра Веб-сервисов. Если описанная служба SOAP использует данные, типы которых кодируются в других файлах WSDL, однако, необходимо использовать XML и сеть, передающую (CFNetwork) для доступа к службе также.

XML-RPC

Должным образом отформатированным сообщением XML-RPC является HTTP запрос POST, организация которого находится в XML. Указанный удаленный сервер выполняет затребованный вызов и возвращает любые запрошенные данные в формате XML.

XML-RPC распознает параметры функции позицией. Параметры и возвращаемые значения могут быть простыми типами, такими как числа, строки, и даты или более составные типы, такие как структуры и массивы.

У XML-RPC есть значительное ограничение, в котором это определяет строковые параметры, как являющиеся текстом ASCII. Некоторые серверы XML-RPC осуществляют это, вынуждая пользователя передать многоязычный текст как Основу 64 закодированных данных. XML-RPC действительно поддерживает передающих двоичных данных в XML-документе с помощью Кодировки Base 64.

Для узнавания больше о сообщениях XML-RPC посмотрите спецификацию XML-RPC в http://www .xmlrpc.com/spec.

SOAP

SOAP является протоколом RPC, разработанным к серверам доступа, содержащим объекты, методы которых можно вызвать по Интернету. Запрос SOAP содержит заголовок и конверт; конверт поочередно содержит организацию запроса.

SOAP поддерживает два стиля для представления вызовов работы веб-сервиса: RPC (вызов удаленной процедуры) обмен сообщениями и обмен сообщениями стиля документа. Обмен сообщениями RPC довольно тверд, но может обычно использовать встроенные сериализаторы и deserializers платформы Ядра Веб-сервисов. Обмен сообщениями стиля документа, с другой стороны, обеспечивает большую гибкость; это позволяет сообщениям содержать произвольные элементы данных. Парсинг таких сообщений более сложен и обычно требует, чтобы Вы обеспечили пользовательские сериализаторы или deserializers. Примеры обоих стилей представления даны в следующих двух списках.

  Стиль RPC перечисления 1-1 конверт SOAP

<soapenv:Envelope
    xmlns:soapenv="soap_ns"
    xmlns:xsd="xml_schema_ns"
    xmlns:xsi="type_ns">
    <soapenv:Body>
        <ns1:getStockPrice
            xmlns:ns1="app_ns"
            soapenv:encodingStyle="encoding_ns">
            <stockSymbol xsi:type="xsd:string">AAPL</stockSymbol>
        </ns1:getStockPrice>
    </soapenv:Body>
</soapenv:Envelope>

  Стиль документа перечисления 1-2 конверт SOAP

<soapenv:Envelope
    xmlns:soapenv="soap_ns"
    xmlns:xsd="xml_schema_ns"
    xmlns:xsi="type_ns">
    <soapenv:Body>
        <ns1:customerOrder
            soapenv:encodingStyle="encoding_ns"
            xmlns:ns1="app_ns">
            <order>
                <customer>
                    <name>Plastic Pens, Inc.</name>
                    <address>
                        <street>123 Yukon Drive</street>
                        <city>Phoenix</city>
                        <state>AZ</state>
                        <zip>85021</zip>
                    </address>
                </customer>
                <orderInfo>
                    <item>
                        <partNumber>88</partNumber>
                        <description>Blue pen</description>
                        <quantity>250</quantity>
                    </item>
                    <item>
                        <partNumber>563</partNumber>
                        <description>Red stapler</description>
                        <quantity>30</quantity>
                    </item>
            </order>
        </ns1:customerOrder
    </soapenv:Body>
</soapenv:Envelope

Для узнавания больше о сообщениях SOAP посмотрите спецификацию SOAP в http://www.w3.org/TR/soap/.

WSDL

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

OS X в настоящее время не предоставляет высокоуровневую поддержку для WSDL непосредственно. Однако это относительно прямо для парсинга XML использования файла WSDL NSXMLParser, тогда используйте SOAP или RPC для вызывания функций, описанных в файле WSDL.

Некоторые веб-сервисы интегрируют WSDL и SOAP более сложными способами, фактически кодируя данные SOAP во внешних файлах WSDL. Текущая реализация платформы Ядра Веб-сервисов не поддерживает этот тип кодирования данных.

К службам доступа, использующим внешнее кодирование данных, необходимо использовать методы низшего уровня. Например, можно использовать NSXMLParser чтобы считать и проанализировать файл WSDL от URL, затем используйте NSXMLDocument для построения надлежащего сообщения XML затем используйте HTTP или HTTPS, обменивающийся сообщениями для добавления сообщения, снова с помощью NSXMLParser считать и проанализировать ответ.

Для узнавания больше о WSDL посмотрите спецификацию в http://www.w3.org/TR/wsdl.