Должен ли я RESTify мои вызовы RPC через HTTP?

У нас есть HTTP-сервисы, которые являются RPC. Они возвращают XML, представляющий объект, который был получен или создан. Я хочу знать преимущества (если они есть) "восстановления" услуг.

Я вижу только то, что нам не нужны представления для КАЖДОГО ресурса, и нам не нужно поддерживать все операции (GET, PUT, POST, DELETE) на всех ресурсах. В основном, мой вопрос в этом.

Убедите меня, что я должен использовать успокаивающие сервисы вместо RPC через HTTP и какими будут эти успокоительные службы?

Ответ 1

Для одного это все о семантике, URI является индикатором Uniform Resource. HTTP предоставляет методы для GET, POST, PUT и DELETE ресурса. Заголовки HTTP указывают, в каком формате я хочу получить или отправить информацию. Все это доступно через HTTP-протокол.

Таким образом, вы можете повторно использовать тот же URL-адрес, который вы используете для вывода HTML, чтобы получить XML, JSON таким образом, чтобы HTTP использовался для использования.

XML-RPC и SOAP основаны при вызове методов, которые описываются файлом XSD или WSDL, в то время как REST основан на получении/изменении ресурсов. Разница тонкая, но очевидная. URL-адрес только описывает ресурс, а не действие, как это часто бывает с SOAP и XML-RPC.

Преимущества REST - это то, что вы можете использовать HTTP-глаголы для изменения ресурса как предполагаемого для вызова метода, который может быть назван create/new/add и т.д. Значимые коды состояния HTTP вместо различных ответов об ошибках и возможности для указания различных форматов на одном и том же ресурсе стандартным способом.

Вам также не нужно принимать ВСЕ глаголы на ресурсе RESTful, например, если вы хотите, чтобы ресурс только для чтения возвращал код состояния 405 Method Not Allowed для любого глагола, который не является GET.

Должны ли вы повторить вызовы RPC для REST? Нет, я так не думаю. Преимущества не перевешивают время разработки. Должны ли вы изучать REST при создании нового веб-сервиса? Да, я лично считаю, что потребление ресурса REST будет намного более естественным и может расти гораздо быстрее.

EDIT

Почему я чувствую, что REST выигрывает в XML-RPC/SOAP, так это то, что при разработке веб-сайтов вы уже суммируете все необходимые данные для вывода в HTML, вы также пишете проверочный код для тел POST. Почему вы должны перейти на другой протокол только из-за изменения транспортной разметки?

Таким образом, если вы разрабатываете новый сайт (язык агностик), если вы действительно думаете об URI в качестве ресурсов, вы в основном используете свой URI как вызовы методов с помощью HTTP-глагола, префиксного вызова метода.

То есть, GET on/products/12 с заголовком HTTP Accept: application/json; в основном (мнимый) преобразуется в getProducts(12,MimeType.Json).

Этот "метод" должен сделать пару вещей

  • Проверьте, поддерживаем ли мы JSON как тип MIME. (Проверить запрос)
  • Подтвердить данные запроса
  • Совокупные данные для продукта 12.
  • Формат для JSON и возврат.

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

Теперь продукт 12 - это ресурс, который, скорее всего, также хочет принять типы HTML MIME для отображения указанного продукта, но для URI, такого как /product/12/reviews/14/, вам не нужен HTML-коллега, вы просто хотите, чтобы ваши потребители могли для публикации на этот URL-адрес для обновления (PUT)/delete (DELETE) собственного обзора.

В мышлении URI строго как ресурсы, а не только расположение веб-страницы, и эти ресурсы, в свою очередь, в сочетании с HTTP-запросом на вызовы методов на стороне сервера приводят к чистым URL-адресам (и т.п.) и (что еще более важно? ) легкость развития.

Я уверен, что существуют фреймворки на любом языке, которые автоматически будут выполнять сопоставление URI с вызовами метода для вас. Я не могу рекомендовать его, так как я обычно выкалываю свои собственные.

ASP.NET MVC также работает по тому же принципу, но, на мой взгляд, он не создает URI RESTful. ASP.NET MVC делает глагольную часть URI по умолчанию, сказав, что хорошо заметить, что ни в коем случае ASP.NET MVC не заставляет это (или что-то в этом отношении) на вас.

Если вы собираетесь выбрать структуру, по крайней мере, они должны:

  • Привязать URI к методам на сервере
  • Поддержка объекта для JSON/XML и т.д. Сериализация. Это боль, если вам нужно написать это самостоятельно, хотя, в зависимости от языка, не обязательно слишком сложно.
  • Предоставляйте какие-то типы безопасных помощников запроса типа, чтобы помочь вам определить, что было запрошено, без разбора заголовков HTTP вручную.

Ответ 3

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