REST не имеет значения, какое правописание вы используете для своего URI.
Все эти идентификаторы работают отлично . Машины не заботятся, потому что они не пытаются извлечь информацию semanti c из идентификатора. Клиенты общего назначения считают URI непрозрачным (за исключением некоторых чисто механических проблем, разрешенных RF C 3986).
Это, однако, не выглядит RESTful. Или это так?
Это может быть хорошо, возможно, есть лучший выбор. Кэширование является очень важной идеей в REST, и если вы ожидаете, что успешный POST-запрос изменит одно из представлений, которые клиент, возможно, кэшировал, то вам нужно подумать о том, как сообщить клиенту, что некоторые записи кэша должны быть недействительным .
Другой способ выразить ту же идею; Вы можете представить, что наш API представляет собой набор объектов. Здесь вы пытаетесь отправить на устройство сообщение format
. Простое написание этого может выглядеть следующим образом:
Resource(/device/{deviceId}).FORMAT()
Но наша проблема в том, что FORMAT
не является частью единого интерфейса, определенного в настоящее время HTTP; и пытаться придумать семантику для FORMAT, которая одинакова для всех ресурсов, не стоит беспокоиться.
Какая альтернатива? Можно использовать POST .
POST служит многим полезным целям в HTTP, включая общую цель «это действие не стоит стандартизировать».
Resource(/device/{deviceId}).POST()
и это прекрасно работает. Конечно, иногда у нас есть более одного действия, которое не стоит стандартизировать. Как мы можем различать их?
Resource(/device/{deviceId}).POST(format)
Компоненты общего назначения направляют запрос вашему обработчику сообщений, затем ваш заказной код запрашивает запрос и передает его модулю в вашем коде, который специализируется на обработке запросов на форматирование. .