Преимущества пар имя-значение для SOAP/WSDL
Я вижу API, такие как PayPal и т. д. предлагая вызвать их услуги с помощью NVP или SOAP/WSDL. При использовании среды .NET (3.5) с использованием традиционных веб-служб (без WCF) что лучше и почему? Я знаю, что WSDL позволяет вам ввести URL API, и он генерирует обертки для вас. Так почему же тогда компании вообще предлагают NVP?
3 ответа:
Похоже, что в этой отрасли существует бесконечная путаница в отношении различных типов веб-сервисов.
SOAP-это протокол обмена сообщениями . У него столько же общего с отдыхом, сколько у яблока с газонным трактором. Некоторые из вещей, которые вы хотите использовать в протоколе обмена сообщениями:Заголовки и другие атрибуты, не относящиеся к контенту."
- адресация-маршрутизация сообщения к различным серверам / получателям на основе заголовков;
- гарантированная доставка через очередь и другие методы;
- шифрование, подпись и другие функции безопасности;
- транзакции и оркестровки;
- точное представление сложных структурированных данных в одном сообщении;
...и так далее. Это далеко не полный перечень. Что WSDL добавляет к SOAP, в первую очередь, это:
Возможность обнаружения с помощью контракта , формы машиночитаемой "документации", которая точно сообщает потребителям, что требуется для отправки сообщения и позволяет автоматически генерировать прокси;
Строгая, автоматизированная проверка схемы сообщений, так же, как XSD работает для XML.
REST-этоне протокол обмена сообщениями. Покой - это система ресурсов и действий. Это надежный выбор для многих архитектур по нескольким важным причинам, как указано в других ответах. Он также имеет мало отношения к услугам" NVP", таким как PayPal и flickr.
NVP API PayPal не является ОСТАЛЬНОЕ. Это альтернативный RPC-подобный протокол обмена сообщениями через HTTP
POST
для клиентов, которые не поддерживают или испытывают трудности с поддержкой SOAP. Это не мое мнение, это констатация факта. Одно из полей в НВП на самом делеMETHOD
. Этоясно словоблудие RPC. Взгляните на их API дляUpdateRecurringPaymentsProfile и попробуйте сказать мне, что это имеет смысл описывать как "ресурс". Это не ресурс, а средство. операция .В случае PayPal, в частности, API "NVP" (
HTTP POST
) уступает API SOAP почти во всех отношениях. Он существует для потребителей, которые не могут использовать мыло. Если вы можете использовать его, вы определенно должны.И я не обязательно буду бить PayPal за это. Я знаю, что многие люди колотили их за то, что они не собрали "правильный" RESTful API, но это не то, что я имею в виду. Не каждая служба в мире может быть точно описан с отдыхом. PayPal на самом деле не является ресурсо-ориентированной системой, это транзакционная система , поэтому я могу простить их архитекторов и разработчиков за то, что у них нет идеально элегантной архитектуры REST. Возможно, это спорный вопрос, но он не черно-белый. Я просто воспользуюсь системой мыла, если понадобится.
Сравните это, скажем, интерфейс Твиттера. Это настоящая служба отдыха. Каждая "операция", которую вы можете выполнить с этим API, точно описывается как извлечение или передача определенного вида ресурсов. Ресурс - это твит, статус, пользователь. В этом случае буквально нет смысла использовать сложный SOAP API, потому что вы на самом деле не посылаете сообщения, вы не выполняете транзакции, вы просто просите определенные вещи, и эти вещи могут быть описаны с помощью одного URL. Единственная разница заключается в том, что вместо того, чтобы получить веб-страницу HTML, вы получаете некоторые данные XML или JSON; то, как вы просите, совершенно то же самое.
Веб-служба REST обычно (всегда?) использует HTTP
Итак, чтобы попытаться суммировать все, что я сказал, Подумайте об этом следующим образом:GET
для извлечения некоторого ресурса. И Twitter делает именно это.GET
по-прежнему использует "пары имя - значение" - это строка запроса,?q=twitterapi&show_user=true
. Эти биты после?
являются парами имя-значение. И вот отличный пример того, почему вы хотите использовать REST поверх SOAP; вы можете подключить его к RSS-каналу и получать потоковые обновления. Я могу превратить его в живую закладку в Firefox. Или я могу скачать это в формате JSON и привязать его к чему-то вроде jqGrid. Интересно не то, что запрос использует "пары имя-значение"; интересно то, что это простой URL-адрес и может быть использован любым, кто знает, как запросить веб-страницу.Надеюсь, это немного прояснит путаницу.
Используйте REST API (если он доступен), когда вы хотите предоставить данные, использовать или опубликовать их в качестве постоянного ресурса.
Используйте мыло API, когда система транзакционна по своей природе и / или когда вам нужны дополнительные функции, которые может предложить сложный протокол обмена сообщениями, такие как RM и адресация.
Используйте API RPC (который включает почти любой API, полностью смоделированный вокруг HTTP POST), когда нет API SOAP или когда вы не можете использовать API SOAP.
Я предполагаю,что под парами значений имен вы подразумеваете службы REST.
Преимущества отдыха-это прежде всего простота разработки, простота и элегантность, а также меньшие накладные расходы (что очень важно, если вы отправляете и получаете много небольших сообщений).Вот некоторые преимущества отдыха:
- отдых более легкий
- читаемые человеком результаты
- Все является адресуемым ресурсом URI
- услуги отдыха более просты кэшированный
- REST легче построить (не требуются наборы инструментов)
- REST проще вызвать (HTTP-GET, POST, PUT, DELETE)
NVP - это HTTP POST
name=fred amount=100 code=403
Etc
Это формат по умолчанию в любом HTML-браузере, поэтому его легко реализовать для отправки данных в веб-службу
Я не думаю, что это хороший формат для получения данных из веб-сервиса? JSON или XML были бы более подходящими
Не все используют VisualStudio, или имеют доступ к автоматическим генераторам обертки, или хотят использовать такого зверя
Многие веб-мэшапы закодированы на Javascript, поэтому для отправки данных используется HTTP POST это самый простой способ. Результатом возврата является стандартный HTML-код ответа (200, 403, 500 и т. д.) и / или некоторый JSON
Многие поставщики услуг предлагают несколько API для обслуживания всех клиентов