Как стать автором
Обновить

Как я объяснил жене, что такое REST

Время на прочтение7 мин
Количество просмотров29K
Автор оригинала: Ryan Tomayko
Возможно, как и многим, мне не всегда удаётся простым языком объяснять сложные вещи, я становлюсь многословным, уделяю чрезмерное внимание деталям и невольно использую профессионализмы. Наверное, именно поэтому я обратил внимание на статью How I Explained REST to My Wife, в которой Ryan Tomayko вот так запросто рассказывает жене о REST и принципах работы HTTP. В заголовках статьи был перечень языков на которые переведена эта статья и этот список из 6 языков, во-первых, дал понять что я не одинок, во-вторых, показал что статья стоит того что бы добавить перевод на русском.
P.S. Это мой первый первод, но можете смело критиковать, мне будет полезно.

Как я объяснил жене, что такое REST



Жена: Кто такой Рой Филдинг?

Райан: Один умный парень.

Жена: Да? И что он сделал?

Райан: Он помог написать первые веб сервера, а затем выполнил огромное количество работы, чтобы объяснить, почему веб работает так, как он работает. Его имя находится на спецификации протокола, который используется для получения твоим браузером страниц от сервера.

Жена: И как это работает?

Райан: Веб?

Жена: Да

Райан: Хм. Ну, вообще-то это всё довольно удивительно. И самое смешное, что это всё очень недооценено. Протокол, о котором я говорю, HTTP, способен на различные замечательные вещи, которые люди, почему-то игнорируют.

Жена: Ты имеешь в виду то “http” которое я пишу в начале любого адреса в браузере?

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

Жена: Почему?

Райан: Потому что он способен описать положение чего угодно где угодно в мире, из какой угодно точки в мире. Это основа Веб. Ты можешь думать об этом как о GPS координатах для знаний и информации.

Жена: Для веб страниц?

Райан: На самом деле, для чего угодно. Этот парень, Рой Филдинг, в своём исследовании много говорит о том, что может быть адресовано с помощью HTTP. Веб построен основываясь на архитектурном стиле, называемом REST. REST даёт определение ресурсу, который в свою очередь и является объектом адресации.

Жена: Интернет страница это ресурс?

Райан: Типа того. Интернет страница является представлением ресурса. Ресурс сам по себе является лишь общим понятием. URL – это то что ты вбиваешь в браузер…

Жена: Я знаю, что такое URL…

Райан: Хорошо. URL’ы сообщают браузеру что где-то есть ресурс. Браузер может запросить специально представление этого ресурса. Точнее говоря, браузер запрашивает интернет страницу являющуюся представлением этого ресурса.

Жена: А какие другие виды представлений существуют?

Райан: Вообще-то, представления не пользуются большой популярностью. В большинстве случаев ресурс имеет только одно представление. Но мы надеемся, что в дельнейшем они будут использоваться больше, так как всё время появляются новые форматы.

Жена: Например?

Райан: Например, существует такой ресурс который люди называют веб сервисы (Web Services). Они подразумевают множество различных вещей для различных людей, но в основе лежит идея о том, что машины могут использовать интернет так же, как люди используют его.

Жена: Какие-то очередные роботы?

Райан: Не совсем. Я не имею в виду, что машины будут сидеть за столом и просматривать интернет страницы. Компьютеры могут использовать те же протоколы для отправки сообщений друг другу. Мы делаем это на протяжении долгого времени, но на данный момент не существует технологий, используя которые, ты могла бы общаться со всеми машинами во всём мире.

Жена: Почему?

Райан: Потому что они не были для этого спроектированы. Когда Филдинг и его коллеги начали работу над Вебом возможность общаться с любой машиной, в любой точке мира была главной целью. Большинство технологий которые мы сейчас используем в работе для того что бы заставить компьютеры обмениваться информацией не имеют таких требований. Нам нужно взаимодействие лишь с какой-то малой группой машин.

Жена: А сейчас появилась необходимость общаться со всеми ними?

Райан: Да и даже больше. Нам нужна возможность общаться со всеми машинами обо всех вещах присутствующих на всех других машинах. То есть нам нужен способ заставить одну машину сообщить другой машине о ресурсе, который может быть на третьей машине.

Жена: Что?

Райан: Давай представим, что ты разговариваешь со своей сестрой, и она хочет занять у тебя щётку или что-нибудь такое. Но у тебя её нет, она есть у мамы, поэтому ты говоришь сестре, что ей лучше обратиться к маме. Это происходит постоянно в реальном мире и так же это происходит постоянно, когда машины начинают общаться.

Жена: А как машины сообщают друг другу, где находятся нужные им вещи?

Райан: Используя URL, конечно же. Если всё то, о чём общаются машины, имеет соответствующий URL, то ты создал машину эквивалентную существительному. То что ты, я и весь остальной мир договорились обозначать существительными определённые вещи из реального мира это довольно важно, так?

Жена: Да

Райан: Машины не имеют универсального существительного и это причина их проблем. Каждый язык программирования, база данных или другой вид системы имеет свой способ говорить о существительных. Вот почему URL так важен. Он позволяет всем системам сообщать друг другу о своих существительных.

Жена: Но когда я смотрю на интернет страницу, я не думаю о ней в таком ключе.

Райан: И никто не думает. За исключением Филдинга и ещё нескольких людей.

Жена: А что касательно глаголов, местоимений и прилагательных?

Райан: Забавно, что ты спросила, потому что это другая большая часть REST. Ну, по крайней мере, глаголы.

Жена: Я просто шутила.

Райан: Это было забавно, но это не было шуткой. Глаголы важны и они являются важным принципом в программировании и полиморфизме. Полиморфизм – это лишь заумный способ сказать, что различные существительные могут иметь общие глаголы применимые к ним.

Жена: Я не поняла

Райан: Смотри. Взгляни на кофейный столик. Что является существительными? Чашка, поднос, газета, пульт. Теперь давай определим действия, которые можно сделать со всеми этими вещами.

Жена: Я всё ещё не понимаю

Райан: Ты можешь взять их, верно? Ты можешь поднять их. Ты можешь разбить их. Ты можешь сжечь их. Ты можешь применить все эти глаголы к вещам находящимся там.

Жена: Да и?

Райан: Это важно. Что если мне вместо того что бы говорит тебе «возьми чашку», «возьми газету», «возьми пульт», что если бы мне надо было бы использовать разные глаголы с каждым существительным? Я бы не мог использовать слово «возьми» так универсально, а вынужден был бы подбирать новое слово для каждой комбинации глагол/существительное

Жена: Ого! Это странно

Райан: Да, это так. Наш мозг достаточно сообразителен, что бы понимать, что одни и те же глаголы могут быть применены к различным существительным. Некоторые глаголы более специфичны и применимы только к узкому кругу существительных. Например, я не могу водить кружку, я не могу пить машину. Но не которые из них почти универсальны, например, взять(GET), положить (PUT)и удалить(DELETE).

Жена: Ты не можешь удалить(DELETE) чашку.

Райан: Да, но ты можешь выкинуть её. Это была ещё одна шутка?

Жена: Да

Райан: Как бы то ни было, HTTP – протокол, который создан Филдингом и коллегами, полностью о том, как применять глаголы к существительным. Например, когда ты хочешь открыть интернет страницу, браузер применяет HTTP GET(взять) к введённому URL и в результате получает эту страницу.Интернет страницы обычно имеют картинки, верно? Они являются отдельными ресурсами. Интернет страница лишь указывает URL этих картинок, и браузер применяет больше HTTP GET запросов к ним до тех пор, пока все ресурсы не будут получены и страница не будет отображена. Но важным здесь является то, что существуют единые виды взаимодействия с самыми разными видами существительных. Является ли существительным картинка, текст, видео, звук, презентация, не важно. Я могу получить(GET) всё это имея URL.

Жена: Похоже, получить(GET) довольно важный глагол.

Райан: Так и есть. Особенно когда ты используешь браузер, потому что браузер по большей части занимается получением (GET). Он не использует большую часть других видов взаимодействия с ресурсами и это проблема, потому что это убедило большое количество людей, что HTTP существует только для получения(GET). Но HTTP – протокол общего назначения для применения глаголов к существительным.

Жена: Здорово. Но я всё ещё не вижу, как это что-либо меняет. Какие глаголы и существительные тебе нужны?

Райан: Ну, вообще существительные уже есть, но они не в том формате.

Представь, что ты бродишь по www.amazon.com в поисках рождественского подарка для меня. Представь, что каждый товар является существительным. Если бы они имели представление понятное для машин, ты могла бы делать с этими товарами много всякого интересного.

Жена: Почему машина не может понять обычную интернет страницу?

Райан: Потому что интернет страницы спроектированы для людей. Машине совершенно всё равно на макет и стиль. Машинам просто нужны данные. В идеале каждый URL должен иметь представление для человека и представление для машины. Когда машина запрашивает(GET) ресурс, она будет просить машинный ресурс. А когда это делает браузер – понятный для человека.

Жена: И люди должны будут делать машинные представления для всех своих страниц?

Райан: Если это того стоит.

Смотри, мы говорим об этом с большой долей абстракции. Давай возьмём реальный пример. Ты учитель и готов поспорить у вас в школе есть большая компьютерная система, или, по крайней мере, три-четыре компьютера, которые позволяют вам управлять учениками: на каких уроках они находятся, в каком классе учатся, контактное лицо на экстренный случай, информация об учебниках и прочее. Если эта система является веб приложением, то, скорее всего, существует свой URL для каждого перечисленного существительного: ученик, учитель, класс, учебник и прочее. На данный момент, введя URL в браузер, ты получишь интернет страницу. Если бы за каждым URL существовало представление понятное для машины, то было бы достаточно просто добавить новый инструмент в систему, так как вся эта информация использовалась бы стандартными способами. Это бы так же сделало общение между такими системами немного проще. Или мы могли бы построить региональную или даже федеральную систему, которая могла бы общаться с системами отдельных школ с целью сбора результатов тестов. Возможности безграничны.

Каждая из систем получала бы информацию от других систем используя простой HTTP GET(получить). Если одной система нужно добавить что-то в другую систему, это было бы использование HTTP POST(отправить). Если бы система надо было бы обновить что-нибудь в другой системе она бы использовала HTTP PUT(поместить). Единственное что осталось сформулировать это то, как данные должны выглядеть.

Жена: И это то, над чем вы, компьютерщики, работаете сейчас? Решаете, как должны выглядеть данные?

Райан: К сожалению нет. Вместо этого большинство занято написанием кучи сложных спецификаций для выполнения этих целей иными путями, которые далеко не так удобны и красноречивы. Существительные не универсальны и глаголы не полиморфичны. Мы тратим большое количество времени, что бы утвердить и начать использовать, что-то, что очень похоже на другую систему, которая уже потерпела фиаско. Мы используем HTTP, но только потому, что этот протокол позволяет нам меньше взаимодействовать с нашей сетью и специалистами по безопасности. Мы подменяем простоту яркими штучками и мастерами настройки.

Жена: Но почему?

Райан: Я не знаю.

Жена: Почему ты не сделаешь что-нибудь?

Райан: Может быть в будущем.

(Примечание переводчика: после замечаний xanep и Ano исправил имя автора с Рйан на Райан )
Теги:
Хабы:
Всего голосов 133: ↑85 и ↓48+37
Комментарии72

Публикации