четверг, 8 мая 2014 г.

[prog.flame] Еще про RESTful-изм головного мозга в M2M

В продолжение вчерашней темы. Читаю сейчас обзорную книгу "M2M Communications. A System Approach" под редакцией David Boswarthick, Omar Elloumi и Olivier Hersent. Дошел до главы, в которой пытаются привести обоснования использования REST-механизмов для организации M2M взаимодействий. Наткнулся на прекрасное:

The main concept of REST is that a distributed application is composed of resources, which are stateful pieces of information residing on one or more servers. Regardless of their content, in REST it is possible to manipulate resources through a uniform interface that is composed of four basic interactions: CREATE, UPDATE, DELETE, and READ. Each of these operations is composed of request and response messages, and, with the exception of CREATE, they are idempotent, meaning that the end result of each operation is unchanged regardless of how many times the operation itself is repeated. In other words, these operations do not have side effects, meaning that it is possible to distribute resources and to use proxy functions.

Или, на русском языке, при беглом переводе:

Основная концепция REST-а в том, что распределенное приложение собирается из ресурсов, которые представляют из себя кусочки информации со своим собственным состоянием, расположенные на одном или более серверов. Вне зависимости от их содержания, в REST можно манипулировать ресурсами посредством унифицированного интерфейса, состоящего из четырех базовых операций: CREATE, UPDATE, DELETE и READ. Каждая из этих операций состоит из сообщений запрос-ответ, и, за исключением CREATE, эти операции являются идемпотентными, что означает, что результат каждой операции остается неизменным вне зависимости о того, как много раз операция была повторена. Другими словами, эти операции не имеют побочных эффектов, что означает возможность распределения ресурсов и использования проксирующих механизмов.

За последние годы работы настолько часто приходилось натыкаться на проблемы со здравым смыслом и отсутствием элементарной технической грамотности в материалах маркетологов/продуктологов, что подобные фрагменты вызывают у меня непроизвольные и неконтролируемые приступы идиосинкразии :(

Я еще могу согласиться с тем, что операция READ может считаться идемпотентной (хотя, если речь идет о распределенном приложении, в котором доступ к ресурсу могут одновременно выполнять несколько компонентов, идемпотентность READ -- это открытый вопрос, зависящий от параллельно выполняемых операций UPDATE и DELETE). Возможно, мне сложно будет найти достаточно аргументов, чтобы опровергнуть идемпотентность операции UPDATE (но уж точно нельзя считать, что операция UPDATE не имеет побочных эффектов). А вот идемпотентность операции DELETE -- это бред.

И, действительно, спустя буквально несколько страниц после процитированного выше пассажа читаем:

There are also two other HTTP methods, POST and DELETE, which are both non-idempotent operations and are typically used to create and destroy resources, respectively.

Или, по-русски:

Есть еще два других HTTP-метода, POST и DELETE, которые не идемпотентны и обычно используются для создания и удаления ресурсов, соответственно.

С учетом того, что HTTP-GET реализует операцию READ, HTTP-PUT -- UPDATE, HTTP-POST -- CREATE, а HTTP-DELETE -- DELETE, все встает на свои места. DELETE не может быть идемпотентной операций так же, как и CREATE.

Ну и еще прекрасное оттуда же, чтобы два раза не вставать:

Simple HTML and Javascript is all that is needed to create fully fledged M2M applications.

Как же изменилось все за последние 20 лет! Для создания полноценного приложения в области machine-2-machime взаимодействия всего-то и нужно-то HTML да JavaScript :(((

Куда катиться мир?

Отправить комментарий