Если кто-то ищет аналогию , этот ответ может быть полезен.
WSDL похож на команду «показать состояние таблицы» в mysql. Он определяет все элементы (тип запроса,тип ответа, формат URL-адреса для запроса и т. д.,) который должен быть частью XML. По определению я имею в виду:
1) названия запроса или ответа
2) Что следует рассматривать как вход , что следует рассматривать как выход.
XSD похож на команду DESC в mysql. Он сообщает, что все переменные и их типы, запрос и ответ содержится.
0
поделиться
автор: Sunny Gangisetti
Радченко Глеб Игоревич
Кандидат физико-математических наук, доцент
Silicon Austria Labs, Austria, Graz, Staff Scientist
Южно-Уральский Государственный Университет, Старный научный сотрудник, доцент кафедры системного программирования
E-mail: gleb. radchenko@susu.ru
Научные интересы Грид-вычисления.
Облачные вычисления.
Распределенные вычислительные системы.
Публикации Пособие: Распределенные вычислительные системы [Текст в формате PDF].
Пособие: Объектно-ориентированное программирование [Электронное издание + URL для загрузки].
[Полный список публикаций]
Проекты Проект Erasmus+ PWs@PhD. Основная цель проекта PWs@PhD – поддержка развития, модернизации, интернационализации высшего образования, а именно исследовательской составляющей европейского образования уровня PhD, содействие созданию новых PhD-программ в странах-партнерах в области программной инженерии.
Сервисно-ориентированный подход к использованию проблемно-ориентированных пакетов в распределенных и грид-средах (проект DiVTB).
Параллельная реализация нейросетевого алгоритма распознавания раздельной речи (Часть 1, Часть 2, Часть 3).
Новости [2013-12-25] Обновления страниц курсов:
Курс объектной распределенной обработки: лекция «Облачные платформы: VCloud, Cloudstack, Openstack, Yandex Cocaine», ссылки на материалы по частным облачным платформам.
[2013-12-17] Обновления страниц курсов:
Курс объектной распределенной обработки: лекция «Виртуализация, CAP-теорема», доклад Суворова И.Б. «Ботнеты», доклад Беседина К.Ю. «Облачная платформа Windows Azure».
[2013-11-28] Обновления страниц курсов:
Курс объектной распределенной обработки: лекция по P2P системам, доклад Кутыревой Е.М. «Облачные вычисления».
Курс объектной распределенной обработки: в дополнительные материалы добавлена ссылка на проект университета Карлсруе по online-мониторингу активности P2P-сетей (BitTorrent DHT): Live Monitoring of the BitTorrent DHT.
Курс ООП: доклад И. Сухинского, Е. Неповинных «Паттерны проектирования» (+ примеры реализации паттернов), лекция по алгоритмам стандартной библиотеки С++.
Курс ООП: в дополнительные материалы добавлена ссылка на подборку материалов по реализации паттернов проектирования посредством языка C++: CPP-REFERENCE.RU
[2013-11-07] Размещены слайды презентаций:
Курс объектной распределенной обработки: доклад Радченко В.И. «Концепция REST».
Курс ООП: презентация по лекци «Стандартная библиотека шаблонов С++».
[2013-10-26] Размещены слайды презентаций:
Курс объектной распределенной обработки: презентации по лекциям Сервис-ориентированная архитектура (продолжение), XML веб-сервисы: WSDL, SOAP, XML веб-сервисы: стандарты второго поколения.
Курс ООП: презентации по лекциям «Наследование (продолжение). Шаблоны функций», «Шаблоны классов. Исключительные ситуации».
[2013-10-06] В дополнительные материалы курса «Программная инженерия» добавлена ссылка на интерактивный учебный курс по механизмам ветвления в рамках системы управления версиями Git Learn Git Branching.
[2013-06-03] Размещены слайды презентаций:
Курс распределенных объектных технологий: доклад Михайлова Прохора Андреевича Windows Communication Foundation: Архитектура WCF, типы контрактов, модели вызовов операций, привязки, WCF vs. ASP.NET Web API .
Курс Программной инженерии: доклад Радченко Всеволода Игоревича Тестирование исходного кода. Методики тестирования. Разработка через тестирование (Test-driven development).
Курс Программной инженерии: доклад Кожевиной Елены Игоревны Методология экстремального программирования. Scrum.
[Архив новостей]
Ссылки Mendeley — система для каталогизации и управления библиографией. Встраивается в Microsoft Word, позволяя автоматизировать процесс управления списками литературы при подготовке статей. Поддерживает множество форматов оформления библиографических ссылок, включая ГОСТ-7.0.5-2008.
Memsource — операционная среда для выполнения письменных переводов, включающая базы памяти переводов, встроенный машинный перевод, модуль управления терминологией, а также текстовый редактор MemSource Editor. Может импортировать и экспортировать документы всех стандартных форматов, включая Word и PowerPoint.
Мой профиль ResearcherID: G-3547-2013
Scopus Author ID: 55695192800
Google Sholar
ResearchGate
Academia.edu
Чем отличается wsdl от xsd в чем разница между XSD и WSDL разница, которую я заметил, в том, что WSDL содержит XSD и WSDL мы можем объявлять операции, но не в XSD . Это верно?
7 ответов XSD определяет схему, которая является определением того, как XML-документ может быть структурирован. Вы можете использовать его, чтобы проверить, что данный XML-документ действителен и следует правилам, изложенным в схеме.
WSDL-это XML-документ, описывающий веб-сервис. Он показывает, какие операции доступны и как данные должны быть структурированы для отправки в эти операции.
документы WSDL имеют связанный XSD, который показывает, что допустимо поместить в документ WSDL.
WSDL (язык описания веб-служб) описывает вашу службу и ее операции — как называется Служба, какие методы она предлагает, какие параметры и возвращаемые значения имеют эти методы?
Это описание поведения сервиса — это функциональность.
xsd-схемы (определение схемы Xml) описывает статическую структуру сложных типов данных, которыми обмениваются эти методы службы. Он описывает типы, их поля, любые ограничения на эти поля (например, максимальная длина или шаблон регулярного выражения) и т. д.
Это описание типов данных и, следовательно, статических свойств сервиса-это данные.
XSD: определение схемы XML.
XML: расширяемый язык разметки.
WSDL: язык определения веб-службы.
Я не собираюсь отвечать в техническом плане. Я направляю это объяснение на начинающих.
нелегко общаться между двумя различными приложениями, которые разрабатываются с использованием двух разных технологий. Например, компания в Чикаго может разработать веб-приложение с использованием Java, а другая компания в Нью-Йорке может разработать приложение на C# , и когда эти две компании решили поделиться информацией, тогда XML входит в картину. Это помогает хранить и транспортировать данные между двумя различными приложениями, разработанными с использованием различных технологий. Примечание: это не ограничивается языком программирования, пожалуйста, сделайте исследование по транспортировке информации между двумя различными приложениями.
XSD-это определение схемы. Под этим я подразумеваю, что он говорит пользователям разрабатывать свой XML в таком схема. См. ниже изображения и внимательно следите за элементом «load-on-startup» и его типом, который является целочисленным. В изображении XSD вы можете видеть, что это должно быть целочисленное значение для «load-on-startup», и, следовательно, когда пользователь создал свой XML, они передали значение int этому конкретному элементу. Напомним, что XSD-это схема и стиль, а XML-это форма для взаимодействия с другим приложением или системой. Нужно видеть XSD и создавать XML таким образом, иначе он не будет взаимодействовать с другое приложение или система, которая была разработана с использованием другой технологии. Компания в Чикаго предоставляет шаблон XSD для компании в Техасе, чтобы написать или создать свой XML в данном формате XSD. Если компания в Техасе не смогла придерживаться этих правил или схемы, упомянутых в XSD, то невозможно ожидать правильной информации от компании в Чикаго. После вышеупомянутой истории так много нужно сделать, что любитель или новичок должен знать, кодируя что-то вроде Я сказал выше. Если вы действительно хотите знать, что произойдет позже, то лучше сидеть со старшими инженерами-программистами, которые на самом деле разработали веб-сервисы. Далее идет WSDL, пожалуйста, следуйте изображениям и попытайтесь выяснить, где WSDL будет вписываться.
***************========Ниже приведен частичный XML-образ ==========***************
Мне пришлось создать образец WSDL для веб-службы под названием Book. Обратите внимание, что это XSD, но вы должны назвать его WSDL (язык определения веб-службы), потому что он очень специфичен для веб-служб. Ниже WSDL (или, другими словами, XSD) создается для класса под названием Book.java и он создал SOAP-сервис. Как веб-служба SOAP создала другую тему. Нужно написать класс Java и перед его выполнением создать как веб-службу, пользователь должен убедиться, что AXIS2 API установлен и Tomcat для размещения веб-службы на месте.
Как сервисер (тот, кто позволяет другим (клиентам) получать доступ к информации или данным из своих систем ) фактически предоставляет клиенту (тому, кто должен использовать информацию или данные сервисера) полный доступ к данным через веб-службу, потому что ни одна компания на земля готова открыть свою базу данных для посторонних. Как и моя компания, решила предоставить некоторую информацию о продуктах через веб-сервисы, поэтому нам пришлось создать шаблон XSD и передать его немногим из наших клиентов, которые хотят работать с нами. Они должны написать некоторый код, чтобы полностью использовать данный XSD и совершать вызовы веб-служб для извлечения данных из servicer и преобразования данных, возвращенных в их подходящее требование, а затем отображать или публиковать данные или информацию о продукте на своих вебсайт. Простым примером может служить бронирование авиабилетов. Авиакомпания позволит третьим лицам использовать данные о рейсах на своем сайте для продажи билетов. Но опять же есть гораздо больше к нему, это просто не давая третьей стороне агент по продаже билетов, там будет синхронизация и безопасность на месте. Если нет синхронизации, то есть 100% вероятность того, что более 1 клиента могут купить один и тот же билет из разных источников.
Я надеюсь, что эксперты внесут свой вклад в мой ответ. Это очень трудно новичку или новичку понять XML, XSD, а затем работать с веб-службами.
в чем разница между XSD и WSDL Я заметил, что WSDL содержит XSD и в WSDL мы можем объявить операции, но не в XSD . Это правильно?
6 ответов XSD определяет схему, которая является определением того, как XML-документ может быть структурирован. Вы можете использовать его для проверки того, что данный XML-документ действителен и соответствует правилам, изложенным в схеме.
WSDL — это документ XML, описывающий веб-сервис. Он показывает, какие операции доступны и как должны быть структурированы данные для отправки этим операциям.
Документы WSDL имеют связанный XSD, в котором показано, что можно поместить в документ WSDL.
WSDL (язык описания веб-сервисов) описывает ваш сервис и его операции — как называется сервис, какие методы он предлагает, какие параметры и возвращаемые значения у этих методов? /р>
Это описание поведения сервиса — это функциональность.
XSD (определение схемы XML) описывает статическую структуру сложных типов данных, которыми обмениваются эти сервисные методы. Он описывает типы, их поля, любые ограничения на эти поля (например, максимальная длина или шаблон регулярных выражений) и т. Д.
Это описание типов данных и, следовательно, статических свойств службы — речь идет о данных.
XSD: определение схемы XML.
XML: расширяемый язык разметки.
WSDL: язык определения веб-служб.
Я не собираюсь отвечать технически. Я нацеливаю это объяснение на начинающих.
Нелегко общаться между двумя разными приложениями, разработанными с использованием двух разных технологий. Например, компания в Чикаго может разработать веб-приложение с использованием Java, а другая компания в Нью-Йорке может разработать приложение на C #, и когда эти две компании решили обмениваться информацией, тогда возникает XML. Это помогает хранить и передавать данные между двумя различными приложениями, разработанными с использованием разных технологий. Примечание: это не ограничивается языком программирования, пожалуйста, изучите передачу информации между двумя различными приложениями.
XSD — это определение схемы. Под этим я подразумеваю, что пользователи должны разрабатывать свои XML в такой схеме. Пожалуйста, смотрите изображения ниже, и, пожалуйста, внимательно смотрите с элементом «load-on-startup» и его типом, который является целым числом. На изображении XSD вы можете видеть, что это целочисленное значение для «загрузки при запуске», и, следовательно, когда пользователь создал свой XML, он передал значение int этому конкретному элементу. Напоминаем, что XSD — это схема и стиль, тогда как XML — это форма для связи с другим приложением или системой. Нужно видеть XSD и создавать XML таким образом, иначе он не будет взаимодействовать с другим приложением или системой, которая была разработана с другой технологией. Компания в Чикаго предоставляет шаблон XSD для компании в Техасе, чтобы написать или сгенерировать их XML в заданном формате XSD. Если компания в Техасе не соблюдает эти правила или схемы, упомянутые в XSD, то невозможно ожидать точную информацию от компании в Чикаго. После вышеупомянутой истории так много нужно сделать, что любитель или новичок должны знать, когда кодируют что-то, как я сказал выше. Если вы действительно хотите знать, что произойдет позже, то лучше посоветоваться с ведущими инженерами-программистами, которые действительно разрабатывали веб-сервисы. Далее идет WSDL, пожалуйста, следуйте изображениям и попытайтесь выяснить, куда поместится WSDL.
*************** ======== Ниже приведено частичное изображение XML ========== ********* ******
Мне пришлось создать образец WSDL для веб-службы под названием Book. Обратите внимание, что это XSD, но вы должны называть его WSDL (язык определения веб-службы), поскольку он очень специфичен для веб-служб. Приведенный ниже WSDL (или, другими словами, XSD) создан для класса Book.java и создал службу SOAP. Как создавался веб-сервис SOAP, это другая тема. Нужно написать класс Java, и перед его созданием в качестве веб-службы пользователь должен убедиться, что Axis2 API установлен и Tomcat для размещения веб-службы на месте.
Как обслуживающий (тот, кто позволяет другим (клиентам) получать доступ к информации или данным из их систем) фактически предоставляет клиенту (тому, кому необходимо использовать информацию или данные обслуживающего устройства) полный доступ к данным через веб-службу, потому что ни одна компания на земле не желает раскрывать свою базу данных для посторонних. Как и моя компания, решил предоставить некоторую информацию о продуктах через веб-сервисы, поэтому нам пришлось создать шаблон XSD и передать его нескольким нашим клиентам, которые хотят с нами работать. Они должны написать некоторый код, чтобы в полной мере использовать данный XSD и сделать вызовы веб-службы для извлечения данных из обслуживающего устройства и преобразования данных, возвращенных в их подходящее требование, а затем для отображения или публикации данных или информации о продукте на своем веб-сайте. Простой пример будетПОЛЕТ Бронирование билетов. Авиакомпания позволит третьим сторонам использовать данные о рейсах на своем сайте для продажи билетов. Но опять же, это намного больше, это просто не позволяет стороннему агенту по продаже авиабилетов продавать билеты, будет синхронизация и безопасность на месте. Если синхронизация отсутствует, существует 100% вероятность того, что один и тот же клиент может купить один и тот же авиабилет из разных источников.
Я надеюсь, что эксперты ответят на мой вопрос. Новичку или новичку действительно трудно понять XML, XSD, а затем работать с веб-сервисами.
Дао Вебсервиса. (Или да хватит же изобретать велосипеды!) Недавно на Хабре была опубликована статья под провокационным заголовком и призывом к прекращению изобретений велосипедов в API-строении. Поскольку тема мне интересна, то я просто не мог пройти мимо. Увы, реальность за хабракатом меня сильно разочаровала — я увидел очередной велосипед, да еще и с квадратными колесами. (Коллеги, ничего личного, только техническое обсуждение.) Правда, авторы честно сказали, что увидели на нескольких сайтах модное слово REST и решили сделать по нему. Только вот поняли они этот «РЭСТ» по-своему, примерно как Дед Щукарь читал и понимал толковый словарь. В этом топике я призываю по-настоящему покончить с велосипедами в API сайтов. Ведь получается какой анекдот: АПИ разрабатывается для упрощения доступа к сайту и легкости подключения внешних систем, а получается такой, что с ним еще сложнее, чем без него 🙂
Чуть ниже под катом я подпишу смертный приговор всем велосипедам в универсальных API. Чтобы не быть голословным, я все проиллюстрирую примерами. Но должен предупредить сразу — после прочтения статьи вы не сможете без рвотного рефлекса смотреть на очередной велосипед Васи Пупкина под гордым названием «универсальное API сайта».
Итак на сегодня наиболее распространенными способами доступа к API сайтов являются: 1. XML-RPC. 2. REST (с оговоркой, что это не протокол, а подход). 3. SOAP.
Базовые технологии и сравнение XML-RPC Примерно так же просто выглядят сообщения об ошибках. Такой ответ легко распарсить даже человеку, не говоря уже про машину. Такая простота сослужила ему двоякую службу: с одной стороны он не был принят заказчиком и не стал стандартом, а с другой — понравился толпе простых незамороченных программистов. Этим ребятам нужно было простое и надежное средство обмена информацией между системами, они не хотели заморачиваться на такую хрень как красивый УРЛ, схема документа и прочие академизмы. Первое, что они хотели получить — простую работающую систему. И до сих пор XML-RPC помогает им в этом. Итак: + : простота, краткость сообщений, минимальная проверка формата данных, — : недостаточная строгость, требуется отдельное описание сервиса.
При этом, если XML-RPC использует из HTTP-протокола только транспортную часть для передачи XML-ки запроса/ответа, то REST задействует HTTP по-полной: здесь и авторизационные заголовки, content-negotiation — предпочтения по формату, языку, кодировке и виду ответа, различные служебные заголовки, безгеморная передача бинарных данных и т.п. Ошибки хорошо описываются кодами HTTP 4xx и 5xx. Можно видеть, что REST — органичная надстройка над HTTP. Это неудивительно ведь Рой — один из разработчиков протокола HTTP. Вообще, чем больше я разбираюсь с этим протоколом тем больше мне кажется, что он опередил свое время лет на 20, и чем дальше развивается веб, тем больше возможностей мы из него используем. Само тело сообщения может передаваться в разных форматах: классическом XML либо гиковском JSON. Вообще, REST это не протокол, это подход, и как раз здесь заключена его гибкость, он как бы говорит нам: «Ребята, берите базовые принципы, а дальше делайте как вам удобно». Близость к HTTP-протоколу упрощает и ускоряет его обработку веб-серверами. Итак: + : гибкость, простота, скорость обработки (особенно важно для крупных сайтов), органичность протоколу, мультиформатность, компактность. — : отсутствие строго контроля данных, из практических соображений приходится выходить за рамки идеальной модели.
< soapenv:Envelope xmlns:soapenv =»http://schemas. xmlsoap.org/soap/envelope/» xmlns:xsi =»http://www.w3.org/2001/XMLSchema-instance» xsi:schemaLocation > < soapenv:Body > < req:echo xmlns:req =»http://localhost:8080/axis2/services/MyService/»> < req:category > classifieds </ req:category > </ req:echo > </ soapenv:Body > </ soapenv:Envelope > < soapenv:Envelope xmlns:soapenv =»http://schemas.xmlsoap.org/soap/envelope/» xmlns:wsa =»http://schemas.xmlsoap.org/ws/2004/08/addressing» xmlns:xsi =»http://www.w3.org/2001/XMLSchema-instance» xsi:schemaLocation > < soapenv:Header > < wsa:ReplyTo > < wsa:Address > schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous </ wsa:Address > </ wsa:ReplyTo > < wsa:From > < wsa:Address > localhost:8080/axis2/services/MyService </ wsa:Address > </ wsa:From > < wsa:MessageID > ECE5B3F187F29D28BC11433905662036 </ wsa:MessageID > </ soapenv:Header > < soapenv:Body > < req:echo xmlns:req =»http://localhost:8080/axis2/services/MyService/»> < req:category > classifieds </ req:category > </ req:echo > </ soapenv:Body > </ soapenv:Envelope > — Фак май мозг! — воскликнете вы и будете абсолютно правы — Это что же, ради передачи фитюльки на 10 байт мне надо всю эту лабуду писать? — Да — скажет Логика, и вы, засучив рукава пойдете учить всю эту кучу технологий.
— Сюда еще и XML Schema приплели зачем-то? Какого хрена? А вы уверены, что эти ребята правильно понимают смысл слова «Simple»? — такие мысли будут вас посещать, и это хорошо — вы на верном пути.
Но и это не все: чем больше копаешься в SOAP тем больше всяких разных технологий вылазит на тебя. Когда вы дойдете до WSDL (Язык описания веб-сервисов), вы поймете почему, начиная с какой-то версии, разработчики перестали воспринимать название SOAP как аббревиатуру, а начали понимать буквально — soap («мыло»). В этот момент ваши мысли будет занимать одна идея: почему во всем этом зоопарке технологий отсутствует технология rope («веревка»).
Еще через какое-то время вы воскликните: «Ну нафиг, давайте уж без меня: сами придумали — сами и возитесь. Я вам не машина мегабайты иксэмеля в мозгу парсить!». Поздравляю: теперь вы постигли дао вебсервисов!
Да! Дао веб-сервиса именно в этом и состоит: это язык общения машин и человеку нафиг не надо туда лезть. Надо просто его использовать. Ведь когда вам нужна какая-то программа, вы ее запускаете, а не лезете в бинарный код, чтобы исполнять его в мозгу. Точно так же вы не отправляете HTTP-запросы руками в командной строке, а используете браузер. Так зачем здесь лезть в эту гопу голыми руками, да еще хвастаться кто залез по локоть, а кто по самое плечо? Надо просто его использовать.
Просветленные API API сайта и веб-сервисы — это не что-то милостиво спущенное на нас с небес создателями сайта! Это банальная библиотека функций, которую мы можем встроить в свою программу. Этот вывод становится совершенно естественным, когда вы начинаете мыслить глобально за пределами своего компьютера. Если вам нужна новая уже готовая либа в проекте, что вы делаете? Скорее всего просто скачиваете, устанавливаете и используете? Пишете в начале программы use/require/import/include/… а дальше просто вызываете функции. Почему же работа с веб-библиотекой должна быть сложнее? Вот теперь, просветлившись, мы можем начать работать с просветленным API.
Сейчас в качестве примера мы 1 минуту сделаем работу с API Аэрофлота, будем подглядывать за табло Шереметьево без отрыва задницы от стула. Я беру свой любимый язык и на нем пишу все примеры. Уверен, в вашем языке есть аналогичные модули. Ну а если их там нет, то самое время задуматься, так ли взаимна ваша любовь 😉
Вот тут аэрофлот подробно расписывает свое чудесное API. На первый взгляд, описание достаточно убогое — чисто перечисление методов и параметров. А как же это вызывать, как парсить, что вообще делать? А это уже не наши заботы — пусть об этом болит голова у машины — она же железная, а свою мне не хочется грузить фуфлом. Поэтому моя задача найти машинночитаемое описание сервиса — тот самый WSDL и скормить его компу.
Стойте-стойте, а как же вся эта лабуда с XML, REST, передачей параметров, парсингом ответов и всеми прочими атрибутами «крутого» API? Лучше всего на это отвечает фильм «Матрица», кадр из которого мне захотелось вынести в заголовок: — Нет никакой ложки, Нео.
Только перестав думать о ложке сайтовом API как о чем-то реальном, сложном, можно начать гнуть ее комфортно использовать. Это и есть просветленное API — прозрачное и светлое настолько, что вы его не замечаете, когда работаете. Для вас это просто локальная библиотека. А вся остальная механика с сетевыми заморочками происходит где-то внутри и вас не напрягает.
Как отличить сайтовое API от говна. Полагаю, внимательный читатель уже догадался? Когда вместо простой, прозрачной и удобной работы с API сайта вам приходится морочиться с тем, как бы отправить запрос этому сайту и почему он не хочет принимать так старательно сформированный с помощью curl-а запрос, то вывод должен быть однозначным. Вам подсунули неправильный шоколад.
Выводы В наше время наличие API для сайта претендующего на внимание программистов, всевозможные интеграции и прочее — не повод для гордости, а предмет первой необходимости. Но мало сделать API, даже если вы используете самые модные принципы — надо его сделать удобным и прозрачным. И технология передачи данных здесь имеет значение 10-й важности — это вообще не нужно прикладному программисту. Он должен просто взять и использовать вашу библиотеку. Если вы хотите получить его внимание, чтобы он потратил свое время на интеграцию с вами — сделайте первый шаг — потратьте время на него. Дайте ему очень простую и понятную библиотеку. Не надо кивать на то, что «мы сделали как твиттер — дали REST-подобный интерфейс». Вы забываете главное — у твиттера на каждый язык программирования по 5-10 библиотек, которые можно просто скачать и использовать не заморачиваясь на протокол rest/xmlrpc/soap.
Разница между сообщением SOAP и WSDL? [java, soap, wsdl, web-services] Нам нужно определить, что такое веб-сервис, прежде чем рассказывать, в чем разница между SOAP и WSDL, где два (SOAP и WSDL) являются компонентами веб-сервиса.
Большинство приложений разработаны для взаимодействия с пользователями, пользователь вводит или ищет данные через интерфейс, а затем приложение реагирует на ввод пользователя.
Веб-служба делает более или менее то же самое, за исключением того, что приложение веб-службы обменивается данными только от машины к машине или от приложения к приложению. Часто нет прямого взаимодействия с пользователем.
Веб-служба в основном представляет собой набор открытых протоколов, которые используются для обмена данными между приложениями. Использование открытых протоколов позволяет веб-сервисам быть независимыми от платформы. Программное обеспечение, написанное на разных языках программирования и работающее на разных платформах, может использовать веб-службы для обмена данными через компьютерные сети, такие как Интернет. Другими словами, приложения Windows могут взаимодействовать с приложениями PHP, Java, Perl и многими другими, что в обычных условиях было бы невозможно.
Как работают веб-службы?
Поскольку разные приложения написаны на разных языках программирования, они часто не могут взаимодействовать друг с другом. Веб-служба обеспечивает такую связь, используя комбинацию открытых протоколов и стандартов, в основном XML, SOAP и WSDL. Web-сервис использует XML для тегирования данных, SOAP для передачи сообщения и, наконец, WSDL для описания доступности сервисов. Давайте посмотрим на эти три основных компонента приложения веб-службы.
Протокол простого доступа к объектам (SOAP) Протокол простого доступа к объектам или SOAP — это протокол для отправки и получения сообщений между приложениями без столкновения с проблемами взаимодействия (взаимодействие означает, что платформа, на которой работает веб-служба, становится неактуальной). Другой протокол, имеющий аналогичную функцию, — это HTTP. Он используется для доступа к веб-страницам или для работы в сети. HTTP гарантирует, что вам не придется беспокоиться о том, какой тип веб-сервера — Apache, IIS или любой другой — обслуживает просматриваемые вами страницы или были ли просматриваемые страницы созданы в ASP.NET или HTML.
Поскольку протокол SOAP используется как для запроса, так и для ответа, его содержимое может незначительно варьироваться в зависимости от его назначения. Ниже приведен пример сообщения запроса и ответа SOAP.
Запрос SOAP:
POST /InStock HTTP/1.1
Host: www.bookshop.org
Content-Type: application/soap+xml; charset=utf-8
Content-Length: nnn
<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
<soap:Body xmlns:m="http://www.bookshop.org/prices">
<m:GetBookPrice>
<m:BookName>The Fleamarket</m:BookName>
</m:GetBookPrice>
</soap:Body>
</soap:Envelope>
Ответ SOAP:
POST /InStock HTTP/1.1
Host: www.bookshop.org
Content-Type: application/soap+xml; charset=utf-8
Content-Length: nnn
<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
<soap:Body xmlns:m="http://www.bookshop.org/prices">
<m:GetBookPriceResponse>
<m: Price>10. 95</m: Price>
</m:GetBookPriceResponse>
</soap:Body>
</soap:Envelope>
Хотя оба сообщения выглядят одинаково, они используют разные методы. Например, глядя на приведенные выше примеры, вы можете увидеть, что запрашивающее сообщение использует метод GetBookPrice
для получения цены книги. Ответ осуществляется методом GetBookPriceResponse
, который будет сообщением, которое вы, как «запрашивающий», увидите. Вы также можете видеть, что сообщения составляются с использованием XML.
Язык описания веб-сервисов или WSDL WSDL — это документ, в котором описывается веб-служба, а также рассказывается, как получить доступ и использовать ее методы.
WSDL заботится о том, как узнать, какие методы доступны в веб-сервисе, на который вы наткнетесь в Интернете. Взгляните на образец файла WSDL:
<?xml version="1.0" encoding="UTF-8"?>
<definitions name ="DayOfWeek"
targetNamespace="http://www. roguewave.com/soapworx/examples/DayOfWeek.wsdl"
xmlns:tns="http://www.roguewave.com/soapworx/examples/DayOfWeek.wsdl"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns="http://schemas.xmlsoap.org/wsdl/">
<message name="DayOfWeekInput">
<part name="date" type="xsd:date"/>
</message>
<message name="DayOfWeekResponse">
<part name="dayOfWeek" type="xsd:string"/>
</message>
<portType name="DayOfWeekPortType">
<operation name="GetDayOfWeek">
<input message="tns:DayOfWeekInput"/>
<output message="tns:DayOfWeekResponse"/>
</operation>
</portType>
<binding name="DayOfWeekBinding" type="tns:DayOfWeekPortType">
<soap:binding
transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="GetDayOfWeek">
<soap:operation soapAction="getdayofweek"/>
<input>
<soap:body use="encoded"
namespace="http://www. roguewave.com/soapworx/examples"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</input>
<output>
<soap:body use="encoded"
namespace="http://www.roguewave.com/soapworx/examples"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</output>
</operation>
</binding>
<service name="DayOfWeekService" >
<documentation>
Returns the day-of-week name for a given date
</documentation>
<port name="DayOfWeekPort" binding="tns:DayOfWeekBinding">
<soap:address location="http://localhost:8090/dayofweek/DayOfWeek"/>
</port>
</service>
</definitions>
Главное, что нужно помнить о файле WSDL, это то, что он предоставляет вам:
A description of a Web service The methods a Web service uses and the parameters that it takes A way to locate Web servicesperson Jad Chahine
schedule 31. 10.2016
WSDL: взгляд изнутри, часть I | Журнал ВРМ World | Пресс-центр Первая статья рубрики посвящена языку описания Web-сервисов, одной из самых популярных на сегодняшний день XML-технологий. Автор статьи рассматривает некоторые аспекты проектирования Web-сервисов, делится своим опытом и оценивает роль и место WSDL в этом процессе.Недавно автору статьи довелось использовать язык WSDL (Web Services
Description Language, Язык описания Web-сервисов) для нескольких существующих
Web-сервисов — на одном клиенте работал сервер и клиентская реализация. У этого
клиента и специалистов по обслуживание сервера уже сложились тесные рабочие
отношения, но наступил момент, когда возникла необходимость в еще одной
клиентской реализации, которую должна была выполнить группа разработчиков,
находящихся в противоположенной точке земного шара. В связи с этим
потребовалась четкая спецификация, описывающая такие сервисы, а именно для
этого и предназначен WSDL. Поэтому автор вознамерился основательно изучить то,
что ранее не было достаточно освещено. В результате, он приобрел ценный опыт —
ему удалось вспомнить старую и добрую практику проектирования программного
обеспечения и обнаружить ряд проблем, характерных для Web-сервисов, WSDL и XML
Schema.
В самом начале, на этапе проектирования, было допущено несколько ошибок,
которые изначально трудно заметить. Вероятно, эти недочеты не были бы допущены,
если бы проектировщики дали формальное определение для своих сервисов на WSDL.
Так что, вот основная мысль этих двух статей: пишите WSDL заранее, не
генерируйте его потом, как это часто советуют поставщики .
При всем внимании, которым были одарены Web-сервисы, часто сложно отделить
желаемое от действительного. В предлагаемом цикле статей акцент будет сделан на
реальном, а не на потенциальном. В них читатель не найдет краткого обзора WSDL,
кроме того предполагается, что он знаком с W3C XML Schema. В первой статье
рассказывается, чем могут быть полезны при проектировании Web-сервисов практика
проектирования программного обеспечения и опыт в области распределенной
обработки данных. В ней рассматриваются некоторые решения, которые должен
принимать проектировщик Web-сервисов, приводятся необходимые советы и
рекомендации. В остальных статьях будет описан процесс проектирования: во
второй статье будут перечислены некоторые «темные стороны» спецификации WSDL
1.1. В нее не войдут определения типов данных — темы третьей статьи, в которой
будет представлена W3C XML Schema с позиции того, кто использует ее для
определения данных, передаваемых через интерфейсы Web-сервисов.
Проектирование Web-сервисов Употребляемый автором термин Web-сервисов относится исключительно к
тому виду технологии, которая состредоточена на взаимодействии
(interoperability). Это означает, что эта технология стандартизирована:
гетерогенные системы работают только при наличии отрытых стандартов. В этом
случае уместен вопрос: будут ли Web-сервисы решением вашей проблемы? Сегодня
одного слова Web-сервисы уже недостаточно, чтобы говорить о солидности
компании, их использующей, поэтому будет лучше, если имеются иные веские
основания для их использования. Если вы контролируете оба конца канала, не
исключено, что существуют более подходящие технологии. Сейчас — только заря эры
открытых стандартов распределенной обработки данных. Поэтому цена поддержки
Web-сервисов на этом еще несформировавшемся рынке остается высокой — это и
снижение производительности, и увеличение затрат на разработку, и ухудшение
защищенности.
Тезис о том, что Web-сервисы являются «дружественными по отношению к
брандмауэру» («firewall friendly»), обманчив. Действительно, обычные
брандмауэры оберегают корпоративные ценности от «злоумышленников», которые
используют слабые места в прикладном программном обеспечении, появившиеся в
результате открытия портов, на которых исполняются защищённые сервисы. С другой
стороны, Web-сервисы через этих порты «выставляют» прикладное программное
обеспечение. Другими словами, они ослабляют безопасность, предоставляя
посторонним лицам доступ к приложениям — именно то, чему сетевой брандмауэр
должен был бы воспрепятствовать. Поэтому необходимо новое поколение
брандмауэров. На рынке уже появилось несколько новых игроков, предлагающих
такие продукты. Поставщики обычных брандмауэров также начинают обращать
внимание на эту проблему. Но это только начало, и такая технология должна еще
оправдать себя.
Даже если предполагается применять Web-сервисы, необходимо помнить, что
необязательно использовать SOAP. Например, автор статьи видел формы,
передаваемые как аргумент запроса на удаленный вызов процедуры SOAP (SOAP-RPC).
Ему также попадались формы, которые возвращались как часть ответа удаленного
вызова процедуры SOAP. Он так и не смог найти дополнительную пользу от
применения SOAP. Разве не был бы проще обыкновенный XML или HTML через
HTTP?
Недопустимость генерации WSDL Ответим на вопрос: предназначен ли WSDL 1.1 для восприятия человеком.
Типичный совет — генерировать WSDL, а не писать вручную. Автор по этому вопросу
придерживается следующего мнения. Возможно, это и верно, если таким образом
разрабатывается простой, демонстрационный сервис, но данный подход обречен на
провал, когда он применяется к крупным системам. Даже программист, работающий
самостоятельно, быстро утратит общее представление о проблеме; ситуация
усложняется если разработку совместно ведут различные, территориально
разнесенные группы специалистов. Большие распределенные системы требуют проектирования ; ожидание того, что после объединения они будут
совместно работать, приведет к катастрофе.
Если распределенные компоненты могут разрабатываться на различных языках
программирования, то для того, чтобы указать, как должны быть задействованы
сервисы, необходим Язык описания интерфейсов (Interface Definition Language,
IDL), нейтральный по отношению к языку программирования. У CORBA (Общая
архитектура посредника запросов к объектам, Common Object Request Broker
Architecture), как и у DCOM (Распределенная модель компонентных объектов,
Distributed Component Object Model), такой язык есть. IDL — это контракт между
инициатором на обслуживание и поставщиком, но он только собирает синтаксис.
Семантика остается неосвещенной: IDL оставляет открытым вопрос о том, что
делает сервис.
WSDL — это IDL Web-сервисов. Он описывает, как вызывать Web-сервисы. Он
также определяет ответы, которые могут быть получены как при успешном вызове,
так и нет. Спецификация WSDL жестко регламентирует формат сообщений,
используемые протоколы и адрес, по которому находятся сервисы. К сожалению,
даже четкое и строгое описании на WSDL не гарантирует высокое качество
проектирования. Подобно всем языкам IDL, WSDL силен в синтаксисе и слаб в
семантике. Однако, не стоит им пренебрегать — в конечном счете важна именно
семантика, синтаксис же используется просто, чтобы ее раскрывать.
Проектирование интерфейсов Прежде чем приступить к написанию WSDL, необходимо оговорить с заказчиками
то, что Web-сервис должен делать. Следует записать случаи использования, четко
определив, как этот сервис взаимодействует со своей средой. Предположим, что
программа-агент (actor) с какой-либо целью вызывает Web-сервис. В этом случае,
нужно создать не только сценарий «солнечного дня», который реализует
поставленную задачу, но сценарий «дождливого дня», когда результат
отрицательный. Какие гарантии может предложить система, что цель успешно
достигнута? А когда нет? Где находится граница ответственности клиентской части
и сервера?
Трудно переоценить важность четкого определения требований. На этом этапа
стоит задуматься о цели проекта. В чем конкретно она заключается? Какие данные
необходимо получать от клиента, и что должен поставлять сервер? Совершение
ошибки на этом шаге чревато большими затратами.
Например, рассмотрим Web-сервис, который в качестве параметров принимает
список установленных программ и величину свободного места на диске. Затем этот
сервис должен вернуть список приложений, подлежащих обновлению. В случае если
места достаточно, проблем не возникает. Однако, как быть, если его
недостаточно? Как выбрать продукты, для которых необходимо установить новые
версии? Предполагается ли, что клиент сам удаляет старые редакции программ,
чтобы освободить место для новых? Это непростые вопросы, для решения которых
потребуется разрабатывать сложные алгоритмы, при реализация которых не
исключены ошибки. Разумеется, ни одну систему не следует определять подобным
образом. Сервер должен предоставлять список приложений, зависимости между ними
и требования, которые они предъявляют к ресурсам. Решение же о том, какой пакет
установить, является задачей клиента. Поэтому поручив серверу это задание,
клиент ничего не выиграет, он только повысит затраты на разработку серверной
части.
Таким образом, необходимо проводить анализ затрат на начальном этапе. При
этом можно проигнорировать технические детали — сервис можно рассматривать как
черный ящик. Но нельзя пренебрегать деталями, касающимися взаимодействия между
этим сервисом и его средой.
Следующий шаг — проанализировать, как можно реализовать случаи
использования. Будет ли единственный интерфейс (portType в WSDL
версии 1.1), обеспечивающий всю функциональность? Или несколько интерфейсов?
Каждый интерфейс может быть предложен в нескольких конечных точках, но, как
правило, он должен быть неделимым. То есть конечная точка должна предоставлять
либо всю функциональность, либо ничего. Аналогично, интерфейс должен быть
семантически последовательным. Сказанное носит рекомендательный характер и
опирается на здравый смысл, хотя ничто в спецификации WSDL не препятствует иной
интерпретации.
Требуются ли какие-нибудь поддерживающие интерфейсы? Как и когда они должны
вызываться? Какова природа этой зависимости? Пока нет стандартов, а только
рекомендации о том, как обращаться с «хореографией сервисов» (service
choreographies), как разрешать сервисам выполнять гиперссылки к другим
сервисам. Другими словами, это неисследованная проблемная область.
Возвращает ли разрабатываемый сервис результат клиенту? Должен ли клиент
располагать информацией о том, что сервис успешно отработал? Должен ли клиент
вызывать сервис синхронно? Или асинхронно? Или же сервис будет поддерживать оба
типа вызова?
Непрозрачность сети Сеть не является прозрачной — вызов локального сервиса и его удаленный вызов
существенно отличаются друг от друга. В качестве «памятки разработчику» можно
порекомендовать тезисы Питера Дойча (Peter Deutsh) «Восемь заблуждений о
распределенной обработке данных»
(eight fallacies of
distributed computing).
Неверная семантика различна для сетевого окружения и локальной реализации:
при неудачном вызове не всегда известно, исполнился сервис или нет.
WSDL 1.1 описывает следующие виды вызовов: односторонний (one-way),
запрос-ответ (request-response), ответ на требование (solicit-response) и
уведомление (notification). Однако, связывания WSDL поддерживают только
односторонний вызов и вызов вида запрос-ответ. Также следует понимать, что
реально, а что — нет. Другими словами, сегодня невозможно реализовать ситуацию,
когда клиент ожидает с сервера асинхронное получение практического,
«промышленного качества» и согласованного со стандартами результата. Это
следует расценивать как досадное обстоятельство, поскольку это именно тот
механизм, который является наиболее гибким в ситуации частичного сбоя.
WSDL позволяет перемешивать и согласовывать виды вызова и транспорт
(transport). На этом этапе важно прибегнуть к здравому смыслу. Первое
требование — а это не всегда очевидно — необходимо четко представить, как стек
протоколов предлагаемого Web-сервиса будет себя вести. В качестве примера
рассмотрим, что случится если асинхронно вызвать Web-сервис поверх механизма
синхронного транспорта. Предположим, что SOAP-сообщение пересылается в одну
сторону по HTTP: бизнес логика на клиенте формирует SOAP сообщение, чтобы
вызвать удаленный сервис. В результате запрос HTTP посылается на сервер. Когда
сервер получает запрос, он должен немедленно возвратить ответ HTTP, не
обслуживая этот запрос. Бизнес логика на сервере должна отрабатывать после
того , как этот ответ был возвращен. Этот ответ не должен содержать
SOAP-сообщение. Ответ HTTP с кодом состояния 200 или 202 не означает, что
сервис успешно отработал. Код сбоя, с другой стороны, должен гарантировать, что
вызов сервиса не исполнился. Слой SOAP на клиенте не формирует новых сообщений
до тех пор, пока он не получит ответ, или пока не истечет время ожидания.
Таким образом, односторонний вызов не «устраняет» задержки или
неисправности в сети. Самое большее — он помогает избежать задержки с бизнес
логикой на сервере. Автор употребил «самое большее», подразумевая, что эту
функциональность стоит протестировать на инструментальной цепочке сервера,
прежде чем полагаться на нее -корректная реализация является нетривиальной
задачей для любого поставщика.
Используя HTTP в в качестве транспортного протокола, клиент может быть
уверен, что его запрос был доставлен. Стоит заметить, однако, что если клиент
не получил ответ, это не значит, что сервер не получил и не обработал корректно
этот запрос. Например, сеть может «упасть» во время отправки ответа. Другими
словами, реализовать вызов просто, правильно завершенный вызов —
нет .
Отличие Web-сервисов от распределенных объектов Объекты характеризуются состоянием. Следует избегать состояния, поскольку
оно связывает ресурсы и ослабляет масштабируемость. Слабосвязанная архитектура
разрешает отдельным компонентам изменяться, не разрушая систему. Весьма
вероятно, что в будущем потребуется расширять Web-сервис. Как же при этом
сохранить обратную совместимость?
Несмотря на то, что достоинство удаленного вызова процедуры (RPC) в легкости
реализации, он не очень хорошо уживается со слабой связанностью: необходимо
передавать фиксированный список параметров при каждом вызове Web-сервиса. Эту
проблему можно в некоторой степени сделать менее острой, разрешив некоторым
параметрам «не иметь значения». Оставим без рассмотрения возникающие в этом
случае проблемы, связанные с обеспечением возможности взаимодействия, — более
фундаментальное ограничение заключается в том, что этот прием позволяет
исключать параметры, а не добавлять их. Вызовы в стиле документа проявляют себя
лучше, когда части документа могут быть определены как необязательные. Они
также могут быть спроектированы для расширяемости.
Определение ограниченных интерфейсов Следует внимательно изучить то, что предлагается: и на уровне данных, и на
уровне кодирования данных. Необходимо помнить, что придется продолжить
поддерживать поставляемый интерфейс. Чем ограниченнее интерфейс, тем легче его
реализация. WSDL же спроектирован для гибкости.. Из-за этой гибкости легко
ошибиться в спецификации Web-сервисов и оставить многие опции реализации
неохваченными . Следует избегать этого — клиенты и серверы должны уметь
обрабатывать все сообщения, которые допустимы по контракту.
Типичная ошибка, совершаемая при реализации серверных систем, — установление
соединения с базой данных при каждом запросе к этой базе. Автор совершил такую
ошибку — выяснилось, что установление соединения с базой данных занимает больше
времени, чем все остальное, вместе взятое. Чтобы минимизировать это падение
производительности, можно прибегнуть к одному из двух приемов: воспользоваться
пулом соединений (connection pool) или хранимой процедурой.
При использовании Web-сервисов стоимость установки соединения также высока.
Опять-таки дополнительные затраты на вызов могут быть уменьшены повторным
использованием существующего соединения. С другой стороны, необходимо
учитывать, что поддержание открытого соединения требует ресурсов. Однако, важно
помнить, что расходы, связанные с вызовами Web-сервиса, гораздо более высокие
по сравнению с вызовом локальной функции и, следовательно, их следует реже
использовать.
Здесь уместно провести аналогию с хранимыми процедурами. Вместо отправки
данных и обработки их на клиенте, только чтобы выяснить, что требуются еще
данные, хранимые процедуры оперируют с данными в адресном пространстве базы
данных. Применение хранимых процедур в приложениях баз данных является спорным
моментом — по крайней мере, по двум причинам. Во-первых, язык написания
хранимых процедур не стандартизирован, и поэтому их использование ведет к
зависимости от поставщика БД. Во-вторых, бизнес логика должна находиться в
отдельном слое, а не в базе данных.
Тем не менее, хранимые процедуры решают реальную проблему, и их недостатки
должны быть соотнесены с достоинствами в каждом отдельном случае. Аналогично, в
области Web-сервисов, клиенту предоставляется контроль над логикой за счет
множества мелко структурных вызовов. Крупно структурные сервисы более
напоминают хранимые процедуры. Они не только улучшат производительность, но и
упросят процесс реализации, внедрения и управления всей системой.
Итак, практическая рекомендация — проектировать Web-сервисы под
ограниченные, но крупно структурные интерфейсы. Ограниченность позволяет
показывать как можно меньше, крупность структуры — выполнять как можно больше
для одного вызова.
Разнесение бизнес логики и политики Не следует реализовывать аутентификацию и авторизацию в бизнес логике.
Безопасность транспортного уровня может быть как удовлетворительной, так и нет.
В разделе Ресурсы приведены ссылки на статьи, в которых
рассматривается этот вопрос. Даже если безопасность транспортного уровня и не
урезается, все равно пока нет стандартов — они только разрабатываются, и из них
стоит отметить создаваемые Техническим комитетом OASIS «Защищенность
Web-сервисов»
(OASIS
Web Services Security Technical Committee). Предлагаемые подходы
действительно способствуют разделению бизнес логики и политики (policy):
заголовки SOAP вставляются в сервис, чтобы обеспечить характеристики
безовасности, а информативная часть сообщения сохраняется для бизнес
логики.
Но как же без ложки дегтя — предлагаемый стандарт применим только к
Web-сервисам, использующим SOAP. Еще одна неприятность — отсутствие
стандартизированного способа указать Качество защиты (Quality of
Protection, QoP) сервиса в документе WSDL. Microsoft, BEA, SAP и IBM
опубликовали спецификацию для «Приложений политики Web-сервисов»
(Web Services
Policy Attachments), в которой рассматривается этот вопрос. Насколько
известно автору, этот документ еще не был передан ни в один орган
стандартизации.
Разделение проектирования и реализации В идеале при проектировании Web-сервисов следует оставить вопросы реализации
в стороне. Суть проектирования -посмотреть на систему на высоком уровне
абстракции, не обращая внимания на проблемы реализации. Однако, можно выбрать
такой, казалось бы подходящий по всем параметрам дизайн проекта, который
окажется бесполезным, если инструментальные цепочки, которые предполагается
использовать, не поддерживают конструкции в разработанном WSDL. Автор
настойчиво рекомендует создание макета по техническим спецификациям для
проверки реальности осуществления проекта. Пока этот момент еще не
проработан.
Благодарности Автор выражает глубокую благодарность Марку Портайеру (Mark Portier) и
Кэролайн Гринмен (Caroline Greenman) за их конструктивные замечания.
Ресурсы «Мыльная опера» на тему защищенность Web-сервисов будет продолжаться еще
долго. Ниже приведено «содержание первых серий»:
В цикле статей «Защищенность Web-сервисов»
(Web
Services Security) Билала Сиддикуи (Bilal Siddiqui) описывается «дырка»,
которую создали основанные на SOAP Web-сервисы; В своей статье «Web-сервисам необходим брандмауэр»
(XML
Web services need a firewall) Керри Чемпион (Kerry Champion) выступает за
использование брандмауэров XML; В статье «Брандмауэры XML»
(XML
Firewalls) Престона Гралла (Preston Gralla) содержится упоминание о
некоторых текущих коммерческих реализациях; Спецификация «Ценные качества Web-сервисов»
(Web
Services Goodness (WS-Goodness)) разрешает все известные проблемы
защищенности. В статье «IDL, которого нет»
(The IDL That
Isn’t) Мартина Гуджина (Martin Gudgin) и Тимоти Иуолда (Timothy Ewald)
приводится более глубокий анализ WSDL с позиций IDL.
В белой бумаге «Кто пишет контракты Ваших Web-сервисов»
(Who Writes Your
Web Service Contracts?) корпорации Karniak рассказывается о том, как точное
описание упрощает процесс разработки Web-сервиса.
Автор: Джоан Питерз (Johan Peeters)
Советы и приемы программирования Web-служб: Импорт в WSDL-файлах В данной статье объясняются нюансы двух типов операторов import, используемых в Web Services Description Language (WSDL, язык описания Web-служб)
Russell Butek (butek@us.ibm.com) Инженер-программист, IBM
Содержание 1 Import против include 2 XSD-импорт 3 WSDL-импорт 4 Резюме 5 Ресурсы 6 Об авторах
Операторы import являются простыми, не так ли? Они есть почти в каждом языке программирования или языке описания интерфейсов; если вы читаете эту статью, то, возможно, знаете все, что необходимо знать об import. Итак, почему вы должны прочитать совет по оператору import в файлах Web Services Description Language (WSDL)? Во-первых, существуют два типа операторов import: XSD import и WDSL import. Во-вторых, их соответствующее поведение не совсем идентично. И, в-третьих, хорошо бы знать взаимосвязь между ними.
Import против include Перед погружением в описание операторов import, разрешите мне сказать о различии import и include. Оператор import работает в другом пространстве имен. Оператор include включает другие описания в текущее пространство имен.
XSD-импорт Рассмотрим основной XSD import, например, показанный красным цветом в листинге 1. Все что этот оператор делает — это импорт пространства имен из одной схемы в другую. Схема, определяющая пространство имен urn:listing2
, импортирует схему urn:listing3
. Это все. Никакой файл не импортируется. Обе схемы находятся в одном том же самом файле в листинге 1.
Листинг 1. Адресная книга WSDL, использующая два пространства имен
<?xml version="1.0" ?>
<wsdl:definitions targetNamespace="urn:listing2"
xmlns:tns="urn:listing2"
xmlns:listing3="urn:listing3"
xmlns:wsdl="http://schemas. xmlsoap.org/wsdl/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"/>
<wsdl:types>
<xsd:schema targetNamespace="urn:listing3"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:import namespace="http://www.w3.org/2001/XMLSchema"/>
<xsd:complexType name="Phone">
<xsd:sequence>
<xsd:element name="areaCode" type="xsd:int"/>
<xsd:element name="exchange" type="xsd:int"/>
<xsd:element name="number" type="xsd:int"/>
</xsd:sequence>
</xsd:complexType>
</xsd:schema>
<xsd:schema targetNamespace="urn:listing2"
xmlns:listing3="urn:listing3"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:import namespace="urn:listing3"/>
<xsd:import namespace="http://www.w3.org/2001/XMLSchema"/>
<xsd:complexType name="Address">
<xsd:sequence>
<xsd:element name="streetNum" type="xsd:int"/>
<xsd:element name="streetName" type="xsd:string"/>
<xsd:element name="city" type="xsd:string"/>
<xsd:element name="state" type="xsd:string"/>
<xsd:element name="phone" type="listing3:Phone"/>
</xsd:sequence>
</xsd:complexType>
</xsd:schema>
</wsdl:types>
<wsdl:message name="GetAddressRequest">
<wsdl:part name="name" type="xsd:string"/>
</wsdl:message>
<wsdl:message name="GetAddressResponse">
<wsdl:part name="address" type="tns:Address"/>
</wsdl:message>
<wsdl:message name="GetPhoneRequest">
<wsdl:part name="name" type="xsd:string"/>
</wsdl:message>
<wsdl:message name="GetPhoneResponse">
<wsdl:part name="phone" type="listing3:Phone"/>
</wsdl:message>
<wsdl:portType name="AddressBook">
<wsdl:operation name="getAddress">
<wsdl:input message="tns:GetAddressRequest"/>
<wsdl:output message="tns:GetAddressResponse"/>
</wsdl:operation>
<wsdl:operation name="getPhone">
<wsdl:input message="tns:GetPhoneRequest"/>
<wsdl:output message="tns:GetPhoneResponse"/>
</wsdl:operation>
</wsdl:portType>
</wsdl:definitions> Надеюсь, из листинга 1 ясно, что главной целью оператора import является импорт пространства имен. Более распространенным использованием оператора XSD import является импорт пространства имен, которое появляется в другом файле. Вы можете собрать информацию по пространству имен из файла, но не забудьте, что импортируете пространство имен , а не файл (не путайте оператор import с include).
При импортировании пространства имен из файла вы можете обнаружить атрибут schemaLocation
в операторе XSD import, но это необязательный атрибут. Как показано в листинге 1, schemaLocation не обязателен, поскольку пространство имен оператора import находится там же (в том же файле), где и сам оператор import. Фактически, если вы укажете место расположение файла (как в листинге 2), XML-парсер может проигнорировать это по своему усмотрению. Атрибут schemaLocation
— это попросту подсказка. Если парсер уже знает о типах схемы в этом пространстве имен или имеет какие-либо другие средства их обнаружения, он не обязан переходить в указанное вами место. Такое поведение должно быть для вас еще одним напоминанием о том, что основным назначением оператора XSD import является импортирование пространства имен, а не указание местонахождения объявлений в нем. Естественно, что чаще всего вы будете импортировать пространство имен, о котором XML-парсер ничего не знает, поэтому атрибут schemaLocation
становится необходимым и легко забыть, что он является только подсказкой.
Теперь рассмотрим операторы import, выделенные в листинге 1 синим цветом. Поскольку я использую XSD-пространство имен, я должен явно импортировать его. Но это пространство имен является общим. Практически каждый XML-парсер знает о нем. Большинство парсеров часто не требуют указания для него оператора import. Множество инструментальных средств даже не требуют от вас включения оператора import, выделенного красным цветом (в конце концов, импортируемое пространство имен находится в этом же файле), но у вас должно войти в привычку включение оператора import для всех используемых вами пространств имен. Вы не можете знать, что вы или кто-нибудь другой, использующий ваш WSDL-файл, не будет работать с более взыскательными программами.
Еще раз убедитесь, что используемое вами в операторе import пространство имен является таким же, что и targetNamespace импортируемой схемы. Совершенно очевидно, что в показанном в листинге 1 примере вы должны сделать это. Но если вы переместите схему urn:listing3
в файл с именем listing3.xml и импортируете этот файл (как в листинге 2), то это может стать не очевидным. Фактически, это может выглядеть так, как будто вы изменяете пространство имен схемы в файле, используя отличный от указанного в targetNamespace атрибут оператора import. Это является ошибкой. Вы не можете изменять пространства имен. Атрибут пространства имен оператора import должен соответствовать targetNamespace схемы.
Листинги 2 и 3 получены из листинга 1. Листинг 2 — это листинг 1 с перемещенной схемой Phone в другой файл — листинг 3. Оператор import листинга 2 теперь включает атрибут schemaLocation
(выделенный синим цветом). Это рекомендуемый способ импорта схемы из файла.
Листинг 2. Адресная книга WSDL, импортирующая XSD-файл для схемы Phone
<?xml version="1.0" ?>
<wsdl:definitions targetNamespace="urn:listing2"
xmlns:tns="urn:listing2"
xmlns:listing3="urn:listing3"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/">
<wsdl:types>
<xsd:schema targetNamespace="urn:listing2"
xmlns:listing3="urn:listing3"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:import namespace="urn:listing3"
schemaLocation="listing3.xsd"
/>
<xsd:import namespace="http://www.w3.org/2001/XMLSchema"/>
<xsd:complexType name="Address">
<xsd:sequence>
<xsd:element name="streetNum" type="xsd:int"/>
<xsd:element name="streetName" type="xsd:string"/>
<xsd:element name="city" type="xsd:string"/>
<xsd:element name="state" type="xsd:string"/>
<xsd:element name="phone" type="listing3:Phone"/>
</xsd:sequence>
</xsd:complexType>
</xsd:schema>
</wsdl:types>
<wsdl:message name="GetAddressRequest">
<wsdl:part name="name" type="xsd:string"/>
</wsdl:message>
<wsdl:message name="GetAddressResponse">
<wsdl:part name="address" type="tns:Address"/>
</wsdl:message>
<wsdl:message name="GetPhoneRequest">
<wsdl:part name="name" type="xsd:string"/>
</wsdl:message>
<wsdl:message name="GetPhoneResponse">
<wsdl:part name="phone" type="listing3:Phone"/>
</wsdl:message>
<wsdl:portType name="AddressBook">
<wsdl:operation name="getAddress">
<wsdl:input message="tns:GetAddressRequest"/>
<wsdl:output message="tns:GetAddressResponse"/>
</wsdl:operation>
<wsdl:operation name="getPhone">
<wsdl:input message="tns:GetPhoneRequest"/>
<wsdl:output message="tns:GetPhoneResponse"/>
</wsdl:operation>
</wsdl:portType>
</wsdl:definitions> Листинг 3. XSD-файл для схемы Phone
<?xml version="1.0" ?>
<xsd:schema targetNamespace="urn:listing3"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:import namespace="http://www.w3.org/2001/XMLSchema"/>
<xsd:complexType name="Phone">
<xsd:sequence>
<xsd:element name="areaCode" type="xsd:int"/>
<xsd:element name="exchange" type="xsd:int"/>
<xsd:element name="number" type="xsd:int"/>
</xsd:sequence>
</xsd:complexType>
</xsd:schema> WSDL-импорт Взгляните на листинги 4 и 5. Они почти такие же, как и листинги 2 и 3. Листинг 4 импортирует листинг 5 как листинг 2 импортирует листинг 3. Но сейчас я использую WSDL-импорт вместо XSD-импорта. Отличия между листингом 2 и листингом 4 выделены синим цветом в листинге 4. Аналогично, отличия между листингом 3 и листингом 5 выделены синим цветом в листинге 5.
Листинг 4. Адресная книга WSDL, импортирующая WSDL-файл для схемы Phone
<?xml version="1. 0" ?>
<wsdl:definitions targetNamespace="urn:listing4"
xmlns:tns="urn:listing4"
xmlns:listing5="urn:listing5"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/">
<wsdl:import namespace="urn:listing5" location="listing5.wsdl"/>
<wsdl:types>
<xsd:schema targetNamespace="urn:listing4"
xmlns:listing5="urn:listing5"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:import namespace="http://www.w3.org/2001/XMLSchema"/>
<xsd:complexType name="Address">
<xsd:sequence>
<xsd:element name="streetNum" type="xsd:int"/>
<xsd:element name="streetName" type="xsd:string"/>
<xsd:element name="city" type="xsd:string"/>
<xsd:element name="state" type="xsd:string"/>
<xsd:element name="phone"
type="listing5:Phone"
/>
</xsd:sequence>
</xsd:complexType>
</xsd:schema>
</wsdl:types>
<wsdl:message name="GetAddressRequest">
<wsdl:part name="name" type="xsd:string"/>
</wsdl:message>
<wsdl:message name="GetAddressResponse">
<wsdl:part name="address" type="tns:Address"/>
</wsdl:message>
<wsdl:message name="GetPhoneRequest">
<wsdl:part name="name" type="xsd:string"/>
</wsdl:message>
<wsdl:message name="GetPhoneResponse">
<wsdl:part name="phone"
type="listing5:Phone"
/>
</wsdl:message>
<wsdl:portType name="AddressBook">
<wsdl:operation name="getAddress">
<wsdl:input message="tns:GetAddressRequest"/>
<wsdl:output message="tns:GetAddressResponse"/>
</wsdl:operation>
<wsdl:operation name="getPhone">
<wsdl:input message="tns:GetPhoneRequest"/>
<wsdl:output message="tns:GetPhoneResponse"/>
</wsdl:operation>
</wsdl:portType>
</wsdl:definitions> Листинг 5. WSDL-файл для схемы Phone
<?xml version="1.0" ?>
<wsdl:definitions targetNamespace="urn:listing5"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<wsdl:types>
<xsd:schema targetNamespace="urn:listing5"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:import namespace="http://www.w3.org/2001/XMLSchema"/>
<xsd:complexType name="Phone">
<xsd:sequence>
<xsd:element name="areaCode" type="xsd:int"/>
<xsd:element name="exchange" type="xsd:int"/>
<xsd:element name="number" type="xsd:int"/>
</xsd:sequence>
</xsd:complexType>
</xsd:schema>
</wsdl:types>
</wsdl:definitions> Нужно ли это делать? Если вы запустите любимую программу преобразования WSDL в Java с listing4.wsdl, то получите сообщение об ошибке. В листинге 4 я выделил две ссылки на тип Phone: одну зеленым цветом, другую красным. Зеленая ссылка находится в операторе WSDL message. Этот оператор находит Phone, поскольку является WSDL-оператором, а WSDL-файл импортирует Phone через WSDL-оператор import. Красная ссылка находится в схеме. Эта ссылка не находит схему Phone, поскольку она не импортируется через XSD-оператор import. Вы не можете выйти из схемы для поиска других схем. Вы должны импортировать схемы внутри схем.
Если тип Address
не содержит элемент phone и, таким образом, не ссылается на пространство имен urn:listing5
, то эта пара (листинг 4 и листинг 5) будет допустимой. Но это не является хорошей практикой импорта информации о схеме WSDL-оператором import. Листинги 2 и 3 предпочтительней листингов 4 и 5. Используйте XSD-импорт для импорта схем. Используйте WSDL-импорт для импорта WSDL.
В качестве примера правильного WSDL-импорта обратите внимание на листинг 4, который не содержит ни операторы binding, ни операторы service. Возможно какой-нибудь другой файл, содержащий binding и service, будет импортировать listing4.wsdl через WSDL-оператор import.
Пара последних комментариев по WSDL-импорту. Аналогично XSD-импорту, атрибут namespace
WSDL-оператора import должен быть таким же, как targetNamespace импортируемого WSDL. Атрибут location
WSDL-оператора import, аналогично атрибуту schemaLocation
XSD-оператора import, является просто подсказкой. Однако, в отличие от schemaLocation
, присутствие атрибута location
WSDL-оператора import необходимо. (Это не ясно из спецификации WSDL 1.1, но Basic Profile на Web-сайте WS-I указывает на это. (См. раздел Ресурсы.)
Резюме В данной статье сделана попытка рассказать о следующем:
Хорошей практикой является использование XSD-импорта для импорта схем и WSDL-импорта для импорта WSDL. Хорошей практикой является импортирование всех используемых вами пространств имен. Значение атрибута импортируемого пространства имен должно соответствовать импортируемому значению targetNamespace. Основным назначением оператора import является импорт пространств имен. Атрибуты schemaLocation
и location
фактически являются только подсказками, хотя иногда необходимы. Ресурсы Прочитайте спецификацию WSDL — Web Services Description Language (WSDL) 1.1. Прочитайте статью Пример XML-схемы. Просмотрите web-сайт организации Web Services Interoperability (WS-I). Загрузите IBM WebSphere Application Server Technology for Developers, Version 6.0 — предшественика программы WebSphere Application Server. Дополнительные ресурсы по технологии SOA и Web-служб расположены в зоне developerWorks SOA и Web-службы. Большое количество советов по программированию Web-служб находится на сайте developerWorks. Книги, охватывающие широкий диапазон технических тем, можно приобрести со скидками в Книжном магазине разработчика. Если вы заинтересованы в тестировании IBM-продуктов без традиционно больших начальных вложений или краткосрочных лицензий, обратите внимание на предоставляемую подписчикам developerWorks не дорогую годовую однопользовательскую лицензию на продукты WebSphere, DB2, Lotus, Rational и Tivoli — включая основанную на Eclipse WebSphere Studio IDE — для разработки, тестирования, оценки и демонстрации ваших приложений. Об авторах Russell Butek является консультантом IBM по Web-службам. Он является одним из разработчиков системы IBM WebSphere Web services, а также членом экспертной группы JAX-RPC Java Specification Request (JSR). Russell Butek участвует в реализации системы AXIS SOAP в Apache, приводя AXIS 1.0 в соответствие с JAX-RPC 1.0. Ранее он был разработчиком IBM CORBA ORB и представителем IBM во многих специальных комиссиях OMG, включая председательство в комиссии portable interceptor. Связаться с Russell можно на butek us.ibm.com .
Теги:
j2ee
SOAP
web services
WSDL
xml
XSD против WSDL: в чем разница?
XSD — это способ проверки XML-документов. WSDL — это способ описания веб-сервисов с помощью XML. Автор
Том Донохью
Обновлено: 14 июля 2022 г.
Комментарии
При работе с веб-службами XML вы часто сталкиваетесь с терминами WSDL и XSD. Но знаете ли вы, что они делают, и что отличает их друг от друга? Читай дальше, чтобы узнать больше.
Рекламные объявления Что такое XSD? XSD, или определение XML-схемы, — это язык для описания того, как должен выглядеть XML-документ. XSD помогает компьютерной системе проверять документ XML.
XSD можно использовать для определения структуры и правил XML-документа. XSD позволяет вам объявлять такие вещи, как: 1
Список элементов, разрешенных в документе XML, и описание каждого элемента
Порядок этих элементов
Какое содержимое могут содержать элементы (например, строка или дата)
Могут ли элементы содержать дополнительные (дочерние) элементы
Рекламные объявления XSD может использоваться для проверки любого XML-документа — полученного по электронной почте, файла перевод или вызов веб-службы. Поэтому он часто используется во внутренних процессах, чтобы убедиться, что данные в порядке перед их обработкой. Если XML-документ проходит проверку, его иногда называют schema-valid .
Проверка XML-документа с помощью XML-схемы
Источник: Tutorial Works
Определение XML-схемы само по себе является XML-документом 2 , поэтому оно выглядит как обычный XML-файл. Когда документ написан на языке определения схемы XML, он часто сохраняется с расширением .xsd
.
XSD — это стандарт, согласованный W3C. Существуют и другие способы написания правил для XML-документов (например, определения типов документов (DTD), Relax-NG и Schematron), но XSD, вероятно, является наиболее популярным способом проверки XML-документа.
Как это выглядит? Вы начинаете документ XSD с корневого элемента, схемы
. Вы определяете каждый тег в XML-документе, используя тег , элемент
. Каждый из этих элементов может содержать простое содержимое (например, строку или дату) или более сложные данные (например, вложенные элементы).
Например: Вы пишете XSD для XML-документа, описывающего клиента. В XSD вы можете объявить, что у клиента должен быть 1 адрес и что каждый адрес должен содержать штат, но почтовый индекс не является обязательным:
У нас есть XML-документ, который мы хотим проверить на соответствие этому XSD:
<Клиент>
Боб Каролджис
<Адрес>
Гомер-стрит, 1
Фланвиль
БЗ
<Страна>DE
Теперь мы можем проверить это с помощью инструмента xmllint в Linux:
xmllint --schema customer. xsd bob.xml
Если вы попробуете это сделать сами, то увидите сообщение «customer.xml validates» . Успех!
Что можно делать с XSD? Так как же XSD используется в реальном мире?
Напишите XSD. Вы можете создать XSD-документ и написать в нем правила, используя текстовый редактор или специализированное программное обеспечение, такое как XMLSpy.
Проверка с помощью инструмента командной строки. Вы можете использовать такой инструмент, как xmllint, для проверки XML-документов с использованием определения XML-схемы.
Подтвердите свой код. Большинство языков программирования имеют библиотеки для проверки XML-документов с помощью XSD, поэтому вы можете добавить проверку в свои собственные приложения. Например, в Python вы можете использовать пакет xmlschema.
Проверка в другом приложении. Когда программное приложение получает некоторые данные в формате XML (например, от делового партнера), оно может использовать XSD для проверки входящего XML-документа.
Веб-сервисы. Если программа предоставляет веб-службу XML, она может использовать XSD для проверки правильности входящих и исходящих сообщений.
Что такое WSDL? WSDL, или язык описания веб-служб, представляет собой язык на основе XML для описания веб-служб. 3
WSDL определяет стандартный набор элементов XML, которые описывают все функции веб-службы. Вы пишете документ WSDL, используя эти элементы для описания своего веб-сервиса.
Вы можете использовать WSDL для описания веб-службы, чтобы потенциальные потребители службы знали, как ее использовать. Документ WSDL объявляет такие вещи, как:
Операции, которые вы можете вызывать в службе
Как должны выглядеть входные и выходные сообщения
Какой протокол или формат данных следует использовать для доступа к службе
Расположение службы (например, ее конечной точки HTTP)
WSDL выглядит как обычный XML-файл и обычно сохраняется с расширением . wsdl
расширение.
WSDL также является стандартом W3C.
Вам не обязательно использовать WSDL, но, поскольку он полностью документирует веб-службу, он стал распространенным способом обмена информацией о веб-службах (особенно веб-службах SOAP).
Из-за его широкого распространения существует множество инструментов, которые могут понимать файлы WSDL и использовать их для подключения к веб-службам.
Как это выглядит? Существует две основные версии WSDL:
Документ WSDL 1.1 начинается с корневого элемента, определений
.
Документ WSDL 2.0 начинается с корневого элемента, описание
.
WSDL содержит элементы для определения операций веб-службы, типов данных, протоколов и форматов данных, а также местоположения службы. Внутри документа WSDL вы можете использовать XML-схему (XSD) для определения сообщений, которые должны быть получены и отправлены веб-службой.
Что можно делать с WSDL? WSDL существует уже давно, хотя до сих пор используется во многих внутренних системах. Итак, что вы можете с этим сделать?
Написать WSDL. Вы можете написать документ WSDL с помощью любого текстового редактора. Он написан на XML.
Опишите свой веб-сервис. Внутри файла WSDL вы можете описать все операции вашей веб-службы, а также структуру входных и выходных сообщений.
Создание WSDL из кода. В некоторых языках программирования можно автоматически создать документ WSDL из кода. Это намного проще, чем писать документ WSDL вручную.
Например… В Java вы можете написать код для веб-службы, используя API-интерфейсы JAX-WS, и добавить библиотеку, такую как CXF, которая реализует стандарт JAX-WS. При развертывании кода автоматически создается WSDL.
Создайте клиент веб-службы. Если веб-служба предоставляет WSDL, вы можете импортировать WSDL в свой язык программирования и использовать его для создания клиента . Существуют библиотеки, которые помогут вам сделать это на большинстве языков программирования. Это может сэкономить много времени и означает, что вам не нужно самостоятельно писать кучу XML!
Поделись. Вы можете опубликовать WSDL в репозитории, чтобы люди могли найти его и обнаружить вашу веб-службу.
WSDL описывает интерфейс веб-службы. Одна из ключевых вещей, которую вам нужно знать при подключении к веб-службе, — это то, как вы должны составить сообщение запроса. Таким образом, WSDL определяет, как должны выглядеть входные и выходные сообщения для службы.
WSDL не вводил новый язык для описания этих сообщений. Вместо этого он решил принять определение XML-схемы в качестве своей системы типов. 4 Таким образом, WSDL использует возможности XSD для описания входных и выходных сообщений — путем определения элементов, их типов, их последовательности и т. д.
Большинство документов WSDL либо включают документ XSD, либо ссылаются на документ XSD, расположенный где-то еще.
Итак, WSDL и XSD тесно связаны. Вы часто будете видеть, что XSD используется для описания входных и выходных сообщений веб-службы.
Цепочки Иногда вы также можете увидеть цепочку документов, где WSDL ссылается на внешний документ XSD, который сам ссылается на другой документ XSD.
Вы можете увидеть это при работе с очень сложными веб-службами или многими веб-службами, которые используют схожие сообщения. Таким образом, сообщения могут быть определены в одном месте, а затем ссылаться на них из многих мест.
Завершение Определение XML-схемы, или XSD, — это почти де-факто способ написания правил для XML-документов. Документ XSD описывает, какие элементы должны присутствовать в документе XML. Его можно использовать для проверки XML.
WSDL, или язык определения веб-служб, — это способ описания веб-служб. Он также написан на XML. Многие документы WSDL используют XML-схему для описания типов сообщений, которые веб-служба либо потребляет, либо создает.
Существует так много способов создать веб-службу. Но теперь, когда вы знакомы с XSD и WSDL, вы будете на пути к созданию и использованию веб-сервисов на основе XML!
Технология XML: Схема. W3C . Проверено 14 июля 2022 г. . ↩
XML, DTD и схема XML. Университет Дьюка . 2014. ↩
Язык описания веб-служб (WSDL), версия 2.0, часть 1: базовый язык. W3C . 26 июня 2007 г. ↩
Что такое WSDL?. IBM . Проверено 5 июля 2022 г. . ↩
Автор Том Донохью, редактор | Твиттер
| LinkedIn
Том является основателем Tutorial Works .
Он инженер и сторонник открытого исходного кода.
Он использует блог как средство для обмена учебными пособиями, написания статей о технологиях и рассказов о себе в третьем лице.
Его самым первым компьютером был Acorn Electron.
Спасибо за внимание. Давайте оставаться на связи. Мы так долго не могли найти друг друга. Итак, прежде чем вы закроете браузер и забудете об этой статье, давайте останемся на связи?
Подпишитесь на нашу бесплатную информационную рассылку. Мы вышлем вам наши последние учебные пособия и руководства по электронной почте, чтобы вы могли читать на досуге! 🏖 (Никакого спама, отпишитесь, когда захотите.)
Присоединяйтесь к обсуждению Есть мысли по поводу прочитанного? Хотите знать, что думают другие люди? Или в статье что-то технически не так? (Мы хотели бы знать, чтобы мы могли это исправить!) Присоединяйтесь к беседе и оставьте комментарий.
Комментарии проходят модерацию.
Как включить определение XSD в WSDL? Привет,
Я вставляю WSDL и XSD (они были отправлены отдельными файлами)
Пространство имен, упомянутое в WSDL, отличается от того, где я сейчас разрабатываю .
Я хотел бы сделать следующие 3 вещи
1. Включить XSD в определение WSDL
2. Заменить существующее пространство имен на созданное сейчас.
(текущее пространство имен *http://abcd.com/SPAG*)
3. Есть ли другое бесплатное программное обеспечение, которое работает как XML SPY?
Ссылка в WSDL на XSD предоставляется в «schema……. »
Если я скопирую XSD вместо вкладок
, это не создаст мне сообщения настоящее или нулевое исключение
пожалуйста, помогите ….
WSDL и XSD следующие:
—
*WSDL* :
http://schemas.xmlsoap.org/wsdl/»
xmlns:soap=»http://schemas.xmlsoap.org/ wsdl/soap/»
xmlns:xsd=»http://www.w3.org/2001/XMLSchema»
xmlns:n=»http://www.abcd.com/application/ws/network»
xmlns:svc=»http://www.abcd.com/application/ws/network/service»
targetNamespace=»http://www. abcd.com/application/ws/network/service»>
<типы>
http://www.abcd.com/application/ws/network» schemaLocation=»../schema/Network.xsd»/>
<сообщение name="NetworksRequest">
http://schemas.xmlsoap.org/soap/http»/>
—
—
XSD :
HTTP://WWW3. ORGMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEMEST ».
xmlns:n=»http://www.abcd.com/application/ws/network»
xmlns:nt=»http://www.abcd.com/application/ws/networkType»
xmlns: att=»http://www.abcd.com/application/ws/entityAttribute»
targetNamespace=»http://www.abcd.com/application/ws/network»
elementFormDefault=»qualified»>
http://www.abcd.com/application/ws/entityAttribute» schemaLocation=»../schema/EntityAttribute.xsd»/>
http://www.abcd. com/application/ws/networkType» schemaLocation=»../schema/NetworkType.xsd»/>
<последовательность>
1. Подскажите, как включить XSD в приведенную выше структуру
2. нужно ли менять NS во всех местах вышеприведенной структуры, чтобы изменить существующее пространство имен на текущее?
3. Существует ли бесплатное программное обеспечение, которое работает как XML Spy при просмотре определений веб-сервисов?
Regards,
Nikhil
What is the difference between XSD and WSDL?…anycodings Questions : What is the difference between XSD and WSDL 2022-09-27T13:14: 51+00:00 2022-09-27T13:14:51+00:00
945
В чем разница между схемой XML anycodings_web-services и WSDL?
Разница, которую я заметил, заключается в том, что WSDL anycodings_web-services содержит XSD, а в WSDL мы можем объявлять операции anycodings_web-services, но не в XSD. Это правильно?
Админы
WEB-SERVICESWSDLXSD
Всего ответов 8
25
Ответы 1 : В чем разница между XSD и WSDL WSDL (язык описания веб-сервисов) anycodings_wsdl описывает вашу службу и ее операции anycodings_wsdl — как называется служба, anycodings_wsdl, какие методы она предлагает, какой тип anycodings_wsdl из параметров и возвращаемых значений есть ли у этих методов anycodings_wsdl?
Это описание поведения службы anycodings_wsdl — это функциональность.
XSD (определение схемы XML) описывает anycodings_wsdl статическую структуру сложных типов данных anycodings_wsdl, которыми обмениваются методы службы anycodings_wsdl. Он описывает типы, их поля anycodings_wsdl, любые ограничения для этих полей anycodings_wsdl (например, максимальную длину или шаблон регулярного выражения) и anycodings_wsdl и т. д.
Это описание типов данных и, следовательно, статических свойств службы anycodings_wsdl — это anycodings_wsdl о данных.
0
2022-09-27T13:14:51+00:00 2022-09-27T13:14:51+00:00 Ссылка для ответа
мРахман
1
Ответы 2 : В чем разница между XSD и WSDL XSD определяет схему, которая представляет собой определение anycodings_wsdl того, как XML-документ может быть структурирован anycodings_wsdl. Вы можете использовать его для проверки anycodings_wsdl, что данный XML-документ действителен и что anycodings_wsdl следует правилам, которые вы изложили в схеме anycodings_wsdl.
WSDL — это XML-документ, описывающий веб-службу anycodings_wsdl. Он показывает, какие операции anycodings_wsdl доступны и как должны быть структурированы данные anycodings_wsdl для отправки в эти операции.
Документы WSDL имеют связанный XSD anycodings_wsdl, который показывает, что допустимо для помещения в документ WSDL anycodings_wsdl.
0
2022-09-27T13:14:51+00:00 2022-09-27T13:14:51+00:00 Ссылка для ответа
мираж
5
Ответы 3: В чем разница между XSD и WSDL XSD: Определение схемы XML.
XML: расширяемый язык разметки.
WSDL: язык определения веб-службы.
Я не буду отвечать в технических терминах anycodings_wsdl. Я адресую это объяснение начинающим пользователям anycodings_wsdl.
Непросто установить связь между anycodings_wsdl двумя разными приложениями, которые anycodings_wsdl разработаны с использованием двух разных технологий anycodings_wsdl. Например, компания anycodings_wsdl в Чикаго может разработать веб-приложение anycodings_wsdl с использованием Java, а другая компания в Нью-Йорке anycodings_wsdl может разработать приложение на C#. Он помогает хранить и передавать данные anycodings_wsdl между двумя разными приложениями anycodings_wsdl, разработанными с использованием разных технологий anycodings_wsdl. Примечание. Это не ограничивается anycodings_wsdl языком программирования, пожалуйста, изучите anycodings_wsdl информацию о транспортировке информации anycodings_wsdl между двумя разными приложениями anycodings_wsdl.
XSD — это определение схемы. Под этим я подразумеваю, что anycodings_wsdl говорит пользователям, что anycodings_wsdl разрабатывает свой XML в такой схеме. anycodings_wsdl Пожалуйста, смотрите изображения ниже, и, пожалуйста, внимательно следите за anycodings_wsdl с элементом anycodings_wsdl «загрузка при запуске» и его типом, который является целым числом. anycodings_wsdl В изображении XSD вы можете видеть, что anycodings_wsdl означает целочисленное значение для «загрузки при запуске» anycodings_wsdl, и, следовательно, когда пользователь anycodings_wsdl создал свой XML, он передал значение int anycodings_wsdl этому конкретному элементу. Напомним, что anycodings_wsdl XSD — это схема и стиль anycodings_wsdl, тогда как XML — это форма для связи anycodings_wsdl с другим приложением или системой. Anycodings_wsdl должен видеть XSD и создавать XML таким же образом, как anycodings_wsdl, иначе он не будет взаимодействовать с anycodings_wsdl другим приложением или системой, в которой anycodings_wsdl был разработан с использованием другой технологии anycodings_wsdl. Компания anycodings_wsdl из Чикаго предоставляет XSD-шаблон для компании из anycodings_wsdl, штат Техас, для написания или создания своего XML-кода в anycodings_wsdl в заданном формате XSD. Если компания в anycodings_wsdl Техас не соблюдает эти правила anycodings_wsdl или схему, упомянутые в XSD, то anycodings_wsdl невозможно ожидать правильной информации anycodings_wsdl от компании в Чикаго. Существует так много работы с anycodings_wsdl после рассказанной выше истории с anycodings_wsdl, которую любитель или новичок должен знать с помощью anycodings_wsdl при написании кода для чего-то вроде anycodings_wsdl, о котором я говорил выше. Если вы действительно хотите узнать у anycodings_wsdl, что произойдет позже, то лучше, чтобы anycoding_wsdl посидел со старшими инженерами-программистами, которые фактически разрабатывали веб-сервисы anycodings_wsdl. Следующим идет WSDL для anycodings_wsdl, пожалуйста, следуйте изображениям, и anycodings_wsdl попытайтесь выяснить, где WSDL впишется в anycodings_wsdl.
***************======== Ниже приведен частичный XML-образ anycodings_wsdl ==========********* ******
***************======== Ниже приведено частичное XSD-изображение anycodings_wsdl ==========********* ******
***************======== Ниже приведен частичный образ WSDL anycodings_wsdl =======***** ********
Мне пришлось создать образец WSDL для веб-сервиса anycodings_wsdl под названием Book. Обратите внимание, что это XSD anycodings_wsdl, но вы должны называть его WSDL (язык определения веб-службы anycodings_wsdl), потому что anycodings_wsdl очень специфичен для веб-служб. Anycodings_wsdl выше WSDL (или, другими словами, XSD) — это anycodings_wsdl, созданный для класса с именем Book.java, а anycodings_wsdl создал службу SOAP. Как веб-служба SOAP anycodings_wsdl создала ее, является отдельной темой anycodings_wsdl. Нужно написать Java-класс anycodings_wsdl и перед его выполнением создать как anycodings_wsdl веб-службу, пользователь должен убедиться, что Anycodings_wsdl API Axis2 установлен, а веб-служба Tomcat to anycodings_wsdl установлена.
Как сервисер (тот, кто позволяет другим anycodings_wsdl (клиентам) получать доступ к информации или данным anycodings_wsdl из своих систем) фактически предоставляет клиенту anycodings_wsdl (тому, кому нужно использовать сервисную информацию или данные anycodings_wsdl) полный доступ anycodings_wsdl к данным через Веб-служба, anycodings_wsdl, потому что ни одна компания в мире не хочет, чтобы anycodings_wsdl открывала свою базу данных для посторонних. anycodings_wsdl Как и моя компания, мы решили предоставить anycodings_wsdl информацию о продуктах через веб-службы anycodings_wsdl, поэтому нам пришлось создать XSD-шаблон anycodings_wsdl и передать его нескольким нашим клиентам anycodings_wsdl, которые хотят работать с нами. Они anycodings_wsdl должны написать некоторый код, чтобы anycodings_wsdl полностью использовал данный XSD и выполнял вызовы веб-сервиса anycodings_wsdl для получения данных от сервисера anycodings_wsdl и преобразования данных, возвращаемых в anycodings_wsdl, в соответствии с их требованиями, а затем anycodings_wsdl отображал или публиковал данные или информацию anycodings_wsdl о продукте. на их веб-сайте. Простым примером anycodings_wsdl может быть бронирование FLIGHT Ticket anycodings_wsdl. Авиакомпания разрешает третьим сторонам anycodings_wsdl использовать данные о рейсах на своем сайте anycodings_wsdl для продажи билетов. Но, опять же, в anycodings_wsdl есть гораздо больше, это просто не позволяет anycoding_wsdl стороннему агенту по продаже авиабилетов продавать билеты anycodings_wsdl, будет синхронизация и безопасность anycodings_wsdl. Если синхронизация anycodings_wsdl отсутствует, то существует 100 % вероятность того, что более 1 клиента anycodings_wsdl могут купить один и тот же авиабилет anycodings_wsdl из разных источников.
Я надеюсь, что эксперты внесут свой вклад в мой ответ anycodings_wsdl. Новичку anycodings_wsdl или новичку действительно сложно понять XML, XSD и anycodings_wsdl, а затем работать с веб-сервисами.
0
2022-09-27T13:14:51+00:00 2022-09-27T13:14:51+00:00 Ссылка для ответа
раджа
2
Ответы 4 : В чем разница между XSD и WSDL XSD предназначен для проверки документа, а anycodings_wsdl содержит метаданные о XML, тогда как anycodings_wsdl WSDL предназначен для описания местоположения и операций веб-сервиса anycodings_wsdl.
0
2022-09-27T13:14:51+00:00 2022-09-27T13:14:51+00:00 Ссылка для ответа
джидам
4
Ответы 5 : В чем разница между XSD и WSDL XSD (определение схемы XML) определяет элемент anycodings_wsdl в документе XML. Это может быть anycodings_wsdl, используемый для проверки того, соответствуют ли элементы в xml-документе anycodings_wsdl описанию anycodings_wsdl, в которое должно быть помещено содержимое. любое кодирование_wsdl
В то время как wsdl — это особый тип XML-документа anycodings_wsdl, который описывает веб-сервис anycodings_wsdl. Сам WSDL придерживается XSD.
0
2022-09-27T13:14:51+00:00 2022-09-27T13:14:51+00:00 Ссылка для ответа
раджа
5
Ответы 6: В чем разница между XSD и WSDL WSDL — он содержит операции, такие как методы anycodings_wsdl, которые предоставляет веб-сервис. сложные типы данных anycodings_wsdl, такие как объекты, векторы, массивы anycodings_wsdl и т. д., поэтому используется сопоставление этого с xml типом данных anycodings_wsdl xsd. и на основе anycodings_wsdl xsd пользователь, который хочет получить доступ к веб-сервису anycodings_wsdl с другой платформы, может anycoding_wsdl предоставить данные соответствующим образом.
Обратитесь: ayazroomy-java.blogspot.com к anycodings_wsdl, чтобы прочитать об основах веб-сервиса.
0
2022-09-27T13:14:51+00:00 2022-09-27T13:14:51+00:00 Ссылка для ответа
мираж
4
Ответы 7: В чем разница между XSD и WSDL Если кто-то ищет аналогию, этот ответ anycodings_wsdl может быть полезен.
WSDL похож на команду ‘SHOW TABLE STATUS’ anycodings_wsdl в mysql. Он определяет все элементы anycodings_wsdl (тип запроса, тип ответа, формат URL-адреса anycodings_wsdl для обращения к запросу и т. д.), anycodings_wsdl, которые должны быть частью XML. Под определением anycodings_wsdl я имею в виду:
1) Имена запроса anycodings_wsdl или ответа
2) Что следует рассматривать как ввод anycodings_wsdl, что следует рассматривать как вывод anycodings_wsdl.
XSD похож на команду DESCRIBE в mysql. anycodings_wsdl Сообщает, что содержат все переменные и их типы anycodings_wsdl, запрос и ответ.
0
2022-09-27T13:14:51+00:00 2022-09-27T13:14:51+00:00 Ссылка для ответа
радость
4
Ответы 8 : В чем разница между XSD и WSDL XSD — это схема для файла WSDL. XSD содержит типы данных anycodings_wsdl для WSDL. Элемент, объявленный в anycodings_wsdl XSD допустим для использования в файле WSDL.
Мы можем anycodings_wsdl проверить WSDL на XSD, чтобы проверить веб-службу anycodings_wsdl, действителен WSDL или нет.
0
2022-09-27T13:14:51+00:00 2022-09-27T13:14:51+00:00 Ссылка для ответа
джидам
В чем разница между XSD и WSDL? В чем разница между XML-схемой
и WSDL
?
Разница, которую я заметил, заключается в том, что WSDL
содержит XSD
, а в WSDL
мы можем объявлять операции, но не в XSD
. Это правильно?
205 1 год, 6 мес. какие параметры и возвращаемые значения есть у этих методов?
Это описание поведения службы — это функциональность.
XSD (определение схемы XML) описывает статическую структуру сложных типов данных, которыми обмениваются эти методы службы. Он описывает типы, их поля, любые ограничения на эти поля (например, максимальную длину или шаблон регулярного выражения) и так далее.
Это описание типов данных и, следовательно, статических свойств службы — речь идет о данных.
2387 лет, 11 месяцев назад
2) Решение XSD определяет схему, которая представляет собой определение того, как может быть структурирован XML-документ. Вы можете использовать его для проверки того, что данный XML-документ действителен и соответствует правилам, изложенным в схеме.
WSDL — это XML-документ, описывающий веб-службу. Он показывает, какие операции доступны и как должны быть структурированы данные для отправки в эти операции.
Документы WSDL имеют связанный XSD, показывающий, что допустимо для помещения в документ WSDL.
1922 года, 2 месяца назад
3) Решение XSD: определение схемы XML.
XML: расширяемый язык разметки.
WSDL: язык определения веб-службы.
Технически отвечать не буду. Это объяснение предназначено для начинающих.
Непросто установить связь между двумя разными приложениями, разработанными с использованием двух разных технологий. Например, компания в Чикаго может разработать веб-приложение с использованием Java, а другая компания в Нью-Йорке может разработать приложение на C#, и когда эти две компании решили поделиться информацией, на сцену выходит XML. Он помогает хранить и передавать данные между двумя разными приложениями, разработанными с использованием разных технологий. Примечание. Это не ограничивается языком программирования, пожалуйста, изучите передачу информации между двумя разными приложениями.
XSD — это определение схемы. Под этим я подразумеваю, что пользователям предлагается разработать свой XML в такой схеме. Пожалуйста, смотрите изображения ниже и, пожалуйста, внимательно следите за элементом «загрузка при запуске» и его типом, который является целым числом. На изображении XSD вы можете видеть, что это целочисленное значение для «загрузки при запуске», и, следовательно, когда пользователь создал свой XML, он передал значение int этому конкретному элементу. Напоминаем, что XSD — это схема и стиль, тогда как XML — это форма для связи с другим приложением или системой. Нужно видеть XSD и создавать XML таким образом, иначе он не будет взаимодействовать с другим приложением или системой, разработанной с использованием другой технологии. Компания в Чикаго предоставляет шаблон XSD для компании в Техасе, чтобы написать или сгенерировать свой XML в заданном формате XSD. Если компания в Техасе не соблюдает эти правила или схемы, упомянутые в XSD, то невозможно ожидать правильной информации от компании в Чикаго. После вышеупомянутой истории так много нужно сделать, что должен знать любитель или новичок, кодируя что-то вроде того, что я сказал выше. Если вы действительно хотите знать, что произойдет позже, то лучше посидеть со старшими инженерами-программистами, которые фактически разрабатывали веб-сервисы. Далее идет WSDL, пожалуйста, следуйте изображениям и попытайтесь выяснить, где WSDL впишется.
***************========Ниже частичный XML-образ ==========********** *****
***************========Ниже показано частичное изображение XSD ==========********** *****
***************========Ниже частичный образ WSDL =======***** ********
Мне пришлось создать образец WSDL для веб-службы Book. Обратите внимание, что это XSD, но вы должны называть его WSDL (язык определения веб-служб), поскольку он очень специфичен для веб-служб. Приведенный выше WSDL (или, другими словами, XSD) создан для класса с именем Book.java, и он создал службу SOAP. Как веб-служба SOAP создала его, это отдельная тема. Нужно написать класс Java, и перед его выполнением создать веб-службу пользователь должен убедиться, что установлен API Axis2 и Tomcat для размещения веб-службы.
Как сервисер (тот, кто позволяет другим (клиентам) получать доступ к информации или данным из своих систем) фактически предоставляет клиенту (тому, кому нужно использовать информацию или данные сервисера) полный доступ к данным через веб-сервис, потому что нет компания на земле, желающая раскрыть свою базу данных для посторонних. Как и моя компания, мы решили предоставить некоторую информацию о продуктах через веб-сервисы, поэтому нам пришлось создать шаблон XSD и передать его нескольким нашим клиентам, которые хотят работать с нами. Они должны написать некоторый код, чтобы полностью использовать данный XSD и совершать вызовы веб-службы для получения данных от сервисера и преобразования возвращаемых данных в подходящие требования, а затем отображать или публиковать данные или информацию о продукте на своем веб-сайте. Простым примером может быть бронирование авиабилетов. Авиакомпания позволит третьим лицам использовать данные о рейсах на своем сайте для продажи билетов. Но опять же, это гораздо больше, это просто не позволяет сторонним агентам по продаже билетов продавать билеты, будет синхронизация и безопасность. Если синхронизации нет, то существует 100% вероятность того, что более 1 клиента могут купить один и тот же авиабилет из разных источников.
Я надеюсь, что эксперты поддержат мой ответ. Новичку или новичку действительно сложно понять XML, XSD, а затем работать с веб-сервисами.
673 года назад
4) Решение XSD предназначен для проверки документа и содержит метаданные о XML, тогда как WSDL предназначен для описания местоположения и операций веб-сервиса.
1112 лет, 9 месяцев назад
5) Решение XSD (определение схемы XML) определяет элемент в XML-документе. Его можно использовать для проверки того, соответствуют ли элементы в XML-документе описанию, в которое должно быть помещено содержимое.
В то время как wsdl — это особый тип XML-документа, который описывает веб-службу. Сам WSDL придерживается XSD.
412 лет, 9 месяцев назад
6) Решение WSDL. Он содержит операции, такие как методы, которые предоставляет веб-служба. Эти методы могут принимать простые типы данных, такие как int, float и т. д., и сложные типы данных, такие как объекты. , векторы, массивы и т. д., поэтому используется сопоставление этого с типом данных xml xsd. и на основе xsd пользователь, который хочет получить доступ к веб-сервису с другой платформы, может предоставить данные соответствующим образом.
См.: ayazroomy-java.blogspot.com, чтобы прочитать об основах веб-сервиса.
29 лет, 2 месяца назад
7) Решение Если кто-то ищет аналогию, этот ответ может быть полезен.
WSDL похож на команду ‘SHOW TABLE STATUS’ в mysql. Он определяет все элементы (тип запроса, тип ответа, формат URL-адреса для обращения к запросу и т. д.), которые должны быть частью XML. По определению я имею в виду:
1) Имена запроса или ответа
2) Что считать вводом, а что выводом.
XSD похож на команду DESCRIBE в mysql. Он сообщает, что содержат все переменные и их типы, запрос и ответ.
22 года, 9 месяцев назад
8) Решение XSD — это схема для файла WSDL. XSD содержит типы данных для WSDL. Элемент, объявленный в XSD, допустим для использования в файле WSDL.
Мы можем проверить WSDL на XSD, чтобы проверить, действителен ли веб-сервис WSDL.
13 лет, 2 месяца назад
Похожие темы веб-службы
xsd
wsdl
Комментарии 9 лет, 2 месяца назадЭто гораздо лучший ответ, объясняющий XSD в контексте WSDL, а не только разницу между WSDL. Чтобы добавить, определения XSD являются частью WSDL в теге . 9лет, 1 месяц назадПаоло ответ правильный. Просто усилить его. Поскольку WSDL на самом деле является XML и может иметь или не иметь XSD для проверки его структуры. Связанный XSD может быть отдельным файлом и импортироваться в WSDL, либо полный XSD может быть встроен в сам файл WSDL с помощью тега . Дополнительные сведения см. на сайте ibm.com/developerworks/webservices/library/ws-tip-imports , 7 месяцев назадЕсли это в значительной степени две разные вещи, почему, например, когда я создаю веб-службу в Netbeans, я получаю ?xsd=1
в URL автоматически? 3 года, 10 месяцев назад, по крайней мере, это дало мне подсказку о том, как работают эти технологии. 3 года, 6 месяцев назад. Разве DESC в mysql не используется для порядка сортировки? DESCRIBE однако больше похоже на это. 2 года, 10 месяцев назадМожет быть, у меня есть WSDL без XSD, если мне не нужно сложное определение данных? 1 год, 5 месяцев назадВыглядит информативно! WSDL — это «Веб-сервис Описание Язык» Упоминания 4 оборота, 4 пользователя 62%
марка
2 оборота, 2 пользователя 86%
марк_с
2 оборота, 2 пользователя 89%
Паоло
5 оборотов, 3 пользователя 89%
MKod
Приянк Болиа
вивизер
аяз
2 оборота
Солнечный Гангисетти
Снехал Подробнее
О конфиденциальностиУсловияОбщение©2022 Bitcoden. com
SOAP, WSDL, HTTP, XSD? Что за? Первоначально эта статья была размещена на веб-сайте нашего продукта RPG-XML Suite.
Каждый раз, когда я оборачиваюсь, я слышу о новой аббревиатуре, которая должна каким-то образом вписаться в так называемое следующее поколение коммуникаций. Количество аббревиатур и понятий, связанных с веб-сервисами, может показаться новичку дьявольским. Но вам не нужно бросать работу по программированию RPG, чтобы погрузиться в веб-сервисы.
Веб-сервисы существуют уже достаточно давно, чтобы определить, какие технологии приживутся, а какие нет. За последние несколько лет я имел дело с множеством веб-сервисов и обнаружил, что применяемые методы различаются. Другими словами, не существует установленной методологии веб-сервисов. Бесчисленные спецификации утверждают, что готовят нас к следующему обязательному пересмотру, но они полезны только в том случае, если мои деловые партнеры решат их принять.
Когда я начал свое путешествие по XML веб-сервиса, я был губкой. Я изучал каждую новую технологию, связанную с веб-сервисами, по мере ее появления и пытался найти потребность, которая соответствовала бы стоявшему передо мной решению. Звук задом наперёд? Это. Итак, в этой статье я возвращаюсь к основам, чтобы показать, как эти технологии облегчают межплатформенную коммуникацию и как среда RPG/System i имеет аналогичную инфраструктуру.
В начале HTTP получил широкое признание в качестве стандарта для связи клиента с сервером, и программисты поняли, что они могут использовать другие методологии связи для облегчения связи B2B. Но что бизнесы должны передавать друг другу? Должны ли они передавать HTML-формы по URL-адресу? Это было бы слишком беспорядочно и недостаточно реляционно для сложных наборов данных. Должны ли они использовать существующие стандарты текстовых форматов фиксированной длины, такие как EDI X.12? Нам нужна была простая в использовании, независимая от платформы и языка технология передачи — а что может быть более независимым, чем текстовый документ, который сам себя описывает? Введите XML.
XML Labels Data XML — это просто способ маркировки и хранения передаваемых данных, чтобы принимающая сторона могла адекватно проанализировать их на наличие содержимого. На рис. 1 показан пример маркировки данных тегами XML, а на рис. 2 показана простая программа RPG, в которой используются квалифицированные структуры данных. Я думаю, что XML-документ эквивалентен структуре данных, квалифицированной RPG, — она содержит и называет каждую часть данных. Основное различие между ними заключается в том, как они хранятся в памяти. В памяти XML остается таким же, как на рис. 1, потому что именование данных фактически является частью данных. Однако содержимое структуры данных RPG имеет относительное расположение и фиксированную ширину (рис. 3) — данные не , а не описывают себя вне языка RPG.
Теперь о некоторых вопросах: что произойдет, если я отправлю букву в номере заказа, а мой деловой партнер этого не ожидает? Как узнать, какой формат даты следует ожидать в поле атрибута должного? Могу ли я повторить элемент - в теге
или мне нужно отправлять один товар в каждом заказе? Деловые партнеры должны задавать друг другу вопросы и узнавать подробности о том, как форматировать и организовывать передаваемые данные. Определения схем XML (XSD) являются ответом.
Определения XML-схемы XSD позволяют вам применять правила к XML-документу , определяя, как он может выглядеть, какие поля значений могут содержать, как один элемент соотносится с другим и многое другое. Первоначально определения типов документов ( DTD ) были созданы для облегчения определения правил документов, но DTD уходят в прошлое, потому что они просто не удовлетворяют достаточному количеству потребностей. Тем не менее, многие реализации DTD все еще существуют, и вам следует изучить их синтаксис. Однако для всех будущих разработок я рекомендую вам использовать XSD, чтобы ваши веб-службы работали с последними разработками веб-служб.
На рис. 4 показан XSD, объявляющий правила для XML-документа заказа на рис. 1. Ух ты, много текста, учитывая, что это элементарная структура с очень небольшим количеством элементов и атрибутов. Будьте благодарны Rational Developer for i (RDi) за превосходный инструментарий, обеспечивающий визуальную среду для создания и обслуживания XSD (рис. 5 и 6). Однако, даже если вы используете визуальные инструменты, вы можете извлечь пользу из знания того, как работают XSD с нуля — засучите рукава, поехали.
XSD определяют элементы и атрибуты XML так же, как D-спецификации RPG определяют переменные . XML-элемент может иметь тип simpleType или complexType. Основное отличие заключается в том, что complexType позволяет определять дочерние элементы и атрибуты XML, а simpleType — нет. На рис. 4 элементы order, shipTo и item имеют комплексный тип, поскольку внутри них есть дочерние элементы и/или атрибуты, определяющие их дополнительно. Если вы определяете дочерние элементы, тег необходим для размещения определений дочерних элементов. Как только вы перейдете к элементу simpleType, обратите внимание, что объявлен примитивный тип данных (например, type=»string»).
Атрибуты minOccurs и maxOccurs требуют существования элемента или указывают, сколько раз он может повторяться. Если нет ограничений на количество повторений элемента, укажите «неограниченно». Вы также можете использовать minOccurs и maxOccurs как окольный способ определить элемент как «обязательный», аналогично тому, как вы можете определить атрибут элемента как требуемый. Если атрибут элемента является обязательным, вы должны указать required=»true» в определении атрибута.
При разработке XSD может возникнуть вопрос, когда использовать атрибуты и когда элементы. В большинстве случаев нет правильного или неправильного пути. Многие реализации XML идут по пути «все элементы без атрибутов»; однако я выступаю за то, чтобы все поля по умолчанию были атрибутами, если только элемент не нужен. Я пришел к такому выводу, подумав о записи DB2 в физическом файле. Каждая запись имеет атрибуты (например, поля), которые составляют ее данные. Запись заголовка заказа имеет поля (например, ordId, due, dropShip), и когда нам нужно хранить данные для отдельных позиций заказа, мы переходим к новой записи физического файла с подробными сведениями о заказе.
Одно из преимуществ использования атрибутов вместо элементов заключается в том, что для определения атрибута требуется только половина байтов — для его определения не нужны как начальный, так и конечный теги. Например, вместо 11232 вы можете использовать customerNumber=»11232″ . Последовательность важнее всего остального. Разработайте стандарт в своей организации и следуйте ему.
Почему пространства имен? По мере того, как XML становится стандартом де-факто для передачи данных, конфликты имен элементов станут неизбежными, если вы поместите два определяемых бизнесом XML-документа в один файл. Обратите внимание, что это не такая большая проблема, как первоначально думали создатели XML-спецификации, но в любом случае хорошо иметь ее на случай, если она станет проблемой в будущем. Кроме того, при изменении ваших собственных стандартов может потребоваться поддержка старых версий вместе с новыми. Для решения этих проблем в XML были добавлены пространства имен. В настоящее время я вижу очень мало необходимо Использование пространства имен XML за пределами самих спецификаций XML (например, в документах WSDL для разделения определений спецификаций элементов XSD, SOAP и WSDL). Пространства имен будут становиться все более полезными по мере того, как растет признание XML и компании начинают переписывать первые этапы реализации веб-сервисов. Пространства имен работают так же, как ключевое слово префикса в программах RPG для переопределения полей для файла в F-spec. На рис. 7 показаны два физических файла, в которых есть несколько полей с одинаковыми именами (например, ID, CRTDT). Если вы используете оба этих файла в одной и той же программе, вы получите ошибки времени компиляции, утверждающие, что поле «ID» определено по-разному (например, 15 упакованных и 15 альфа-файлов). Вы можете решить эту проблему с помощью ключевого слова prefix (рис. 8).
Чтобы квалифицировать элементы XML в документе, укажите атрибут xmlns (рис. 9). Синтаксис для указания пространств имен:
xmlns:namespace-prefix="namespaceURI" Пропущенный префикс пространства имен объявляет, что это пространство имен по умолчанию для документа, что означает, что вам не нужно полностью определять элементы, принадлежащие этому пространство имен. Вы используете часть namespaceURI как соглашение для уникальной идентификации элементов и атрибутов организации, а не для поиска информации о пространстве имен или выполнения URL-адреса. Однако иногда namespaceURI указывает на реальную веб-страницу, содержащую XSD для объявленного пространства имен.
Элемент на рис. 9 имеет префикс или квалификацию с пространством имен, поскольку состав элемента поставщика отличается от элемента вашей компании. Когда синтаксический анализатор достигает , он знает, что нужно искать атрибуты areaCode, phoneNumber и ext вместо того, чтобы пытаться найти номер телефона между начальным и конечным телефонными тегами. Если у вас есть только одно пространство имен в документе, вы можете опустить все объявления xmlns. Если у меня есть два или более пространств имен, я обычно выбираю по умолчанию то, в котором используется больше всего элементов. Я экономлю больше битов и байтов, поскольку мне не нужно квалифицировать большинство элементов.
Простой протокол доступа к объектам До сих пор мои примеры показывали, как XML и XSD определяют бизнес-данные, отправляемые по сети, но я мало говорил о том, как реальное программирование вписывается в картину. Простой протокол доступа к объектам ( SOAP ) был создан для описания и/или реализации правил межпрограммного взаимодействия по протоколу HTTP с использованием XML. SOAP часто воспринимается как сложный из-за его неясности — одна из возможных причин того, что большинство реализаций используют очень небольшую часть спецификации. Кроме того, инструменты SOAP не были доступны сразу, а детали SOAP никогда не предназначались для расшифровки человеческим глазом. Скорее, SOAP предназначался для скрытой технологии. Хотя SOAP не так полезен, как другие спецификации, его инструменты совершенствуются.
Для большинства реализаций SOAP вы просто добавляете конверт SOAP и тело в начало и конец XML-документа. Помните, что SOAP — это не более чем текст. На рис. 10 показан пример простого XML-запроса для расчета цены без использования SOAP, а на рис. 11 показан эквивалент SOAP. В этом примере используется стиль с кодировкой удаленного вызова процедур (RPC) — обычная реализация SOAP. Такой подход к SOAP нежелателен, потому что он приводит к тому, что тип данных отправляется вместе с данными (следовательно, «закодированными»), добавляя больше к уже раздутому документу. Document Literal (рис. 12) — предпочтительный стиль SOAP.
Когда вы используете Document Literal, вы указываете типы данных для XML в XSD на языке описания веб-служб (WSDL), который я объясню чуть позже. До этого момента мы определяли XML как способ маркировки данных для передачи по HTTP, и у нас есть XSD для определения того, как этот XML может быть сформирован. Мы добавили SOAP-конверт и тело, чтобы упростить веб-сервисы. Теперь мы можем составить программу RPG, необходимую для создания этой веб-службы в нашей системе i. После того, как программирование завершено, нам нужен способ передать детали того, как использовать наш веб-сервис. Для этой задачи нам понадобится WDSL.
Язык описания веб-службы Вы используете WSDL во время разработки для описания программы веб-службы с именами процедур, параметрами ввода/вывода, URL-адресом веб-службы, а также используемыми механизмами оболочки и транспортом (т. е. SOAP через HTTP). Если вы создаете веб-службу, вы создаете файл WSDL, который другие программисты используют при разработке кода на своей стороне для использования вашей веб-службы. Файлы WSDL не используются во время выполнения. Это просто способ для большинства языков программирования «заглушить» свой код — другими словами, создать шаблон кода, который можно заполнить бизнес-логикой.
По сути, WSDL файлы — это прекрасно: Они освобождают вас от необходимости словесно описывать веб-сервис торговому партнеру . Ваш торговый партнер может просто указать в браузере WSDL на вашем сервере и узнать все технические аспекты использования вашего веб-сервиса. WSDL указывает точный URL определяемой им веб-службы (например, http://myiSeries.com/cgi-bin/ws1) и описывает, какие данные требуются для ввода и вывода, и все это в одном документе. Я сравниваю WSDL с сервисной программой RPG. На рис. 13 показано, как можно транспонировать прототип RPG в эквивалентный тег portType WSDL. Обратите внимание, что и прототип, и тип порта ссылаются на фактическое сообщение, которое будет использоваться для структур ввода/вывода с использованием ключевых слов «нравится» и сообщения. Мы должны искать в другом месте документа WSDL, чтобы узнать, как определяются типы данных в атрибуте сообщения, так как нам нужно искать в другом месте нашей программы, чтобы увидеть, как определяется структура, указанная в лайках. На рис. 14 показано, как теги сообщений WSDL соотносятся со структурами данных RPG. Они оба определяют имя и тип данных для информации, передаваемой в интерфейсы и из них.
Теперь, когда мы определили имена подпроцедур (то есть, типы портов), нам нужно указать, где они расположены. Чтобы вызвать объект в сервисной программе RPG, вам нужно знать, в какой библиотеке он находится; в WSDL вы используете элемент службы для определения URL-адреса веб-службы (рис. 15).
Обратите внимание на элемент порта и связанный с ним атрибут привязки. Связывающая часть документа WSDL соединяет с и определяет используемый механизм оболочки и транспорт (рис. 16). Информацию в теге привязки можно было поместить либо в тег службы, либо в тип порта, но создатели спецификации разделили ее ради модульности.
Атрибут type в теге привязки содержит имя ранее определенного portType (т. е. ORDSV). Есть два тега операций, названных так же, как и операции, определенные в теге portType — здесь происходит определение конверта (т. е. SOAP).
На необработанный WSDL смотреть еще больнее, чем на необработанный XSD. К счастью, WDSc предлагает инструменты визуального перетаскивания WSDL. На рис. 17 показаны четыре части WSDL, которые мы обсуждали. На этом экране в WDSc вы можете полностью составить WSDL, не просматривая необработанный текст.
Получив полный документ WSDL, вы можете полностью протестировать его с помощью WDSc. Щелкните документ WSDL правой кнопкой мыши и выберите Веб-службы|Тестировать с помощью обозревателя веб-служб, чтобы открыть представление, позволяющее вызвать процедуру и указать необходимые входные параметры. Нажмите «Отправить», чтобы отправить запрос веб-службе, указанной в части WSDL. Когда процесс завершен, вы можете получить доступ к XML-документам запроса и ответа, что полезно при отладке или попытке определить, что именно отправляется по сети.
Мне всегда хотелось бы знать, что происходит на самом низком уровне, поэтому на рис. 18 показан необработанный запрос веб-службы HTTP, а на рис. 19 показан ответ. В этом случае SOAP не задействован.
Универсальное описание, обнаружение и интеграция Допустим, вы разработали свою первую веб-службу, и все работает отлично, поэтому ваша компания планирует создавать новые. Вскоре веб-службы размножились, как кролики, и люди постоянно запрашивают у вас URL-адреса WSDL. Чтобы сохранить здравомыслие, вам нужен центральный репозиторий для документов WSDL — именно здесь в игру вступает сервер универсального описания, обнаружения и интеграции (UDDI). Серверы UDDI изначально предназначались для обслуживания государственного сектора. Компании могли размещать описания и цены на свои веб-сервисы на центральных серверах (общедоступных серверах как IBM, так и Microsoft). Благо веб-сервисов в начале века умерло, и вместе с ним умер UDDI, по крайней мере, в государственном секторе. Сегодня UDDI используется в основном во внутренних сетях, что вызывает сожаление, учитывая количество известных компаний, таких как UPS и Google, которые теперь предлагают общедоступные веб-сервисы.
С чего начать? «Веб-сервисы» — это расплывчатый термин, и вы должны использовать то, что лучше всего подходит вам и вашим торговым партнерам. Веб-сервисам потребуется время, чтобы вырасти, поэтому я рекомендую следующий подход. Сначала просто отправьте XML через HTTP без SOAP. Не определяйте его сначала через XSD, не используйте пространства имен, не создавайте WSDL и не публикуйте его в репозитории UDDI. Помните обо всех этих технологиях, чтобы иметь возможность планировать будущее, но проверяйте их постепенно.
После того, как вы освоитесь с первым подходом, определите, что вы хотите передать для данных, и создайте XSD с помощью WDSc. Создайте экземпляр XML, щелкнув XSD правой кнопкой мыши и выбрав параметр «Создать | XML-файл». Это даст вам полную структуру XML для передачи и позволит вам поместить ее в вашу программу RPG. Когда вы освоите этот подход, используйте графические редакторы WDSc, чтобы создать WSDL с нуля и протестировать его, щелкнув правой кнопкой мыши Web Services|Test with Web Services Explorer.
Другой способ — зайти на сайт www.XML4RPG.com и приобрести учебный курс Аарона Бартелла «XML Web Services for RPG Programmers». Вы начнете с нуля в описании веб-сервисов, а также в том, как предлагать и использовать веб-сервисы с помощью RPG.
XML WSDL ❮ Предыдущий
Далее ❯
WSDL означает язык описания веб-служб WSDL используется для описания веб-сервисов WSDL написан на XML WSDL — рекомендация W3C от 26 июня 2007 г. Документы WSDL Документ WSDL описывает веб-службу. В нем указано место
службы, и
методы обслуживания с использованием следующих основных элементов:
Элемент Описание <типы> Определяет типы данных (схема XML), используемые веб-службой <сообщение> Определяет элементы данных для каждой операции Описывает
операции, которые могут быть выполнены, и соответствующие сообщения. <привязка> Определяет протокол и формат данных для каждого типа порта
Основная структура документа WSDL выглядит следующим образом:
<определения>
<типы> определения типов данных. …….
<сообщение> определение передаваемых данных….
набор операций……
спецификация протокола и формата данных….
Пример WSDL Это упрощенная часть документа WSDL:
<имя сообщения="getTermRequest">
<имя_операции="getTerm"> <выходное сообщение="getTermResponse"/>
В этом примере Элемент определяет «glossaryTerms»
как имя порта и «getTerm» как имя операции .
Операция «getTerm» имеет входное сообщение под названием «getTermRequest»
и выходное сообщение , называемое «getTermResponse».
Элементы определяют частей каждого сообщения и
связанные типы данных.
Элемент Элемент определяет веб-службу , операций которые могут выполняться и сообщений которые задействованы.
Тип запроса-ответа является наиболее распространенным типом операции, но WSDL определяет четыре типа:
Тип Определение Односторонний Операция может получить сообщение, но не вернет
ответ Запрос-ответ Операция может получить запрос и вернуть
ответ Ответ на запрос Операция может отправить запрос и будет ожидать
ответ Уведомление Операция может отправить сообщение, но не будет ждать
ответ
WSDL Односторонняя операция Пример односторонней операции:
<имя_операции="setTerm">
В приведенном выше примере тип порта «glossaryTerms» определяет одностороннюю операцию «setTerm».
Операция «setTerm» позволяет вводить новые сообщения терминов глоссария с использованием «newTermValues».
сообщение с входными параметрами «термин» и «значение». Однако выход не
определено для операции.
Операция запроса-ответа WSDL Пример операции запрос-ответ:
<имя сообщения="getTermRequest">
<имя_операции="getTerm"> <выходное сообщение="getTermResponse"/>
В приведенном выше примере тип порта «glossaryTerms» определяет операцию «запрос-ответ» под названием «getTerm».
Для операции «getTerm» требуется входное сообщение с именем «getTermRequest».
с параметром «term» и вернет выходное сообщение «getTermResponse»
с параметром под названием «значение».
Привязка WSDL к SOAP Привязка WSDL определяет формат сообщения и сведения о протоколе для веб-службы.
Пример операции запрос-ответ:
<имя сообщения="getTermRequest">
<имя_операции="getTerm"> <выходное сообщение="getTermResponse"/>
transport=»http://schemas.xmlsoap.org/soap/http» /> <операция> <мыло:операция
soapAction="http://example.com/getTerm"/> < /выход>
Элемент привязки имеет два атрибута — имя и тип.
Атрибут имени (вы можете использовать любое имя) определяет имя
привязка, а атрибут type указывает на порт для привязки, в данном случае порт «glossaryTerms».
Элемент soap:binding имеет два атрибута — стиль и транспорт.
Атрибут стиля может быть «rpc» или «document». В этом случае мы используем документ. Атрибут транспорта определяет используемый протокол SOAP.
В этом случае мы используем HTTP.
Элемент operation определяет каждую операцию, которую предоставляет тип порта.
Для каждой операции должно быть определено соответствующее действие SOAP. Вы должны
также укажите, как кодируются ввод и вывод. В этом случае мы используем «буквальный».
❮ Предыдущий
Далее ❯
НОВИНКА
Мы только что запустили Видео W3Schools
Узнать
ВЫБОР ЦВЕТА КОД ИГРЫ Играть в игру
Лучшие учебники Учебник по HTML Учебник по CSS Учебник по JavaScript Учебник How To Учебник по SQL Учебник по Python Учебник по W3. CSS Учебник по Bootstrap Учебник по PHP Учебник по Java Учебник по C++ Учебник по jQuery 900 Справочник
Справочник по HTML Справочник по CSS Справочник по JavaScript Справочник по SQL Справочник по Python Справочник по W3.CSS Справочник по Bootstrap Справочник по PHP Цвета HTML Справочник по Java Справочник по Angular Справочник по jQuery
Основные примеры Примеры HTML Примеры CSS Примеры JavaScript Примеры инструкций Примеры SQL Примеры Python Примеры W3.CSS Примеры Bootstrap Примеры PHP Примеры Java Примеры XML Примеры jQuery
FORUM |
О
W3Schools оптимизирован для обучения и обучения. Примеры могут быть упрощены для улучшения чтения и обучения.
Учебники, ссылки и примеры постоянно пересматриваются, чтобы избежать ошибок, но мы не можем гарантировать полную правильность всего содержания.