Как мне лучше определить конечную точку REST с глаголом в нем? - PullRequest
0 голосов
/ 08 апреля 2020

Мне нужно определить конечную точку для действия, которое должен выполнить сервер: отформатировать устройство.

Конечная точка, с которой я столкнулся:

POST /device/{deviceId}/format

без какого-либо тела.

Это, похоже, не выглядит RESTful. Или это?

Есть ли альтернатива этому? Как я могу сделать это RESTful?

1 Ответ

0 голосов
/ 08 апреля 2020

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)

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

...