Преимущества пар значений имен для SOAP/WSDL
Я вижу API, такие как PayPal и т. д. предлагая позвонить в свои сервисы с помощью NVP или SOAP / WSDL. При использовании среды .NET (3.5) с использованием традиционных веб-служб (без WCF), что лучше и почему? Я знаю, что WSDL позволяет вам вводить URL API, и он генерирует обертки для вас. Тогда почему компании вообще предлагают NVP?
3 ответов
в этой отрасли, похоже, существует бесконечная путаница в отношении различных типов веб-сервисов.
мыло протокол обмена сообщениями. У него столько же общего с отдыхом, сколько у яблока с газонокосилкой. Некоторые из вещей, которые вы хотите в протоколе обмена сообщениями являются:
- заголовки и другие non-контент "атрибутами."
- адресация-маршрутизация сообщения на разные серверы / получатели на основе заголовки;
- гарантированная поставка через queuing и другие методы;
- шифрование, подписание и другие функции безопасности;
- сделок и согласований;
- точное представление сложных структурированных данных в одном сообщении;
...и так далее. Этот список не является исчерпывающим. То, что WSDL добавляет к SOAP, в первую очередь:
обнаружение с помощью контракт, форма машиночитаемая "документация", которая точно сообщает потребителям, что требуется для отправки сообщения и позволяет автоматически генерировать прокси;
строгая, автоматическая проверка схемы сообщений, так же, как XSD работает для XML.
остальное не протокол обмена сообщениями. Отдых-это система ресурсы и действия. Это надежный выбор для многих архитектур для нескольких важных причины, изложенные в других ответах. Он также имеет мало отношения к услугам "NVP", таким как PayPal и flickr.
API NVP PayPal не является отдыхом. Это альтернативный, RPC-подобный протокол обмена сообщениями через HTTP POST
для клиентов, которые не поддерживают или имеют трудности с поддержкой SOAP. Это не мое мнение, это констатация факта. Одно из полей в NVP на самом деле METHOD
. Это явно RPC verbiage. Взгляните на их API для UpdateRecurringPaymentsProfile и попробуйте сказать мне, что это имеет смысл описать как "ресурс". Это не ресурс, это операция.
в случае PayPal, в частности, "NVP" (HTTP POST
) API уступает SOAP API практически во всех отношениях. Это для потребителей, которые не могут использовать мыло. Если ты ... --32-- > can используйте его, вы определенно должны.
и я не обязательно колотить PayPal и для этого тоже. Я знаю, что многие люди избили их за то, что они не собрали "правильный" RESTful API, но это не то, что я получаю. Не каждую услугу в мире можно точно описать с помощью REST. PayPal на самом деле не является ресурсной системой, это транзакционные система, поэтому я могу простить их архитекторов и разработчиков за то, что у них нет совершенно элегантной архитектуры отдыха. Возможно, это спорно, но это не черно-белое. Все в порядке, я просто воспользуюсь Мыльная система, если понадобится.
сравните это, скажем, Twitter API. Это настоящая служба отдыха. Каждая "операция", которую вы можете выполнить в этом API, точно описывается как извлечение или отправка определенного вида ресурса. Ресурс твит, статус пользователя. В этом случае буквально нет смысла использовать сложный SOAP API, потому что вы на самом деле не отправка сообщений, ты не выполнении сделки, вы просто просите конкретного вещи, и эти вещи можно описать с помощью одного URL-адреса. Единственное отличие заключается в том, что вместо того, чтобы вернуть веб-страницу HTML, вы получаете некоторые данные XML или JSON; способ запроса точно такой же.
веб-служба REST обычно (всегда?) использует HTTP GET
для извлечения некоторых ресурсов. И Twitter делает именно это. GET
все еще использует "пары имя-значение" - это строка запроса,?q=twitterapi&show_user=true
. Эти биты после ?
пары имя-значение. И вот отличный пример того, почему вы хотите использовать REST over SOAP; вы можете подключить это к RSS-каналу и получить потоковые обновления. Я могу превратить его в живую закладку в Firefox. Или я могу загрузить его в формате JSON и привязать его к чему-то вроде jqGrid. Интересно не то, что запрос использует "пары имя-значение"; интересно то, что это простой URL-адрес и может потребляться всем, что знает, как запросить веб-сайт страница.
Итак, чтобы попытаться суммировать все, что я сказал, Подумайте об этом так:
используйте REST API (если он доступен), если вы хотите предоставить данные, или использовать или опубликовать их в качестве постоянного ресурса.
используйте SOAP API, когда система является транзакционной по своей природе и / или когда вам нужны дополнительные функции, которые может предложить сложный протокол обмена сообщениями, такие как RM и адресация.
использование API RPC (который включает в себя почти любой API, который моделируется полностью вокруг HTTP POST), когда нет SOAP API или когда вы не можете использовать SOAP API.
надеюсь, что это проясняет некоторые путаницы.
Я предполагаю, что под парами значений имен вы подразумеваете службы 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 для обслуживания всех клиентов