О веб-сервисах
Обзор веб-сервисов
Веб-сервисы обеспечивают веб-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.
Можно сделать SOAP или XML-ВЫЗОВЫ-RPC непосредственно от AppleScript или из процедурных приложений C или Какао. Можно выполнить эти вызовы с помощью или событий Apple или платформы Ядра Веб-сервисов.
Ядро Веб-сервисов является низкоуровневой платформой, находящейся рядом с CFNetwork, Базовой Основой, и Ядром Углерода, подплатформой Core Services, как показано на рисунке 1-2. Это доступно всем приложениям, плагинам, инструментам и демонам.
Платформа не имеет никакой зависимости от сервера окна или окна входа в систему. Это полностью интегрируется с системой OS X, находящейся в Core Services, и эффективно использует CFXMLParser и CFNetwork. Платформа ориентирована на многопотоковое исполнение и на основе цикла выполнения.
О веб-сервисах API
Использовать ли ли XML-RPC или SOAP, Вы используете Ядро Веб-сервисов API для создания вызова к серверу по существу тем же способом:
Создайте словарь, содержащий URL сервера, имя работы и постоянное указание протокола (XML-RPC, SOAP 1.1 или SOAP 1.2).
Создайте вызов метода касательно использования
WSMethodInvocationCreate
, передача в словаре.Создайте словарь, содержащий параметры метода и их имена и другой словарь, указывающий их порядок.
Передайте эти два словаря в вызов касательно использования
WSMethodInvocationSetParameters
.Передайте любые дополнительные настройки, такие как заголовки действия SOAP и отладьте флаги в вызов касательно использования вызовов к
WSMethodInvocationSetPropery
.Создайте обратный вызов, чтобы обработать ответ и передать его в вызов касательно использования
WSMethodInvocationSetCallback
. Этот обратный вызов анализирует словарь, содержащий CFTypes, десериализованный от ответа.Вызовите использование процедуры
WSMethodInvocationInvoke
илиWSMethodInvocationScheduleWithRunLoop
.Проверьте состояние 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.