Статьи

Машина Тьюринга и ОТДЫХ

Мы видим это все время. «RESTful» — это «REST», протокол и т. Д. Однако многие из нас не совсем понимают, что это значит. Мы исправим этот пробел в этой статье!

состояние

В информатике (и в некоторой степени математике) существует понятие государства. Определенная система может находиться в состоянии A или в состоянии B, или это может быть группа других состояний (обычно конечный список состояний).

В качестве примера, скажем, вы пишете программу, которая превращает экран в красный цвет, если температура превышает 80 градусов по Фаренгейту, или в синий цвет, если температура ниже 80 градусов по Фаренгейту.

Мы можем назвать первое состояние (temp> 80 градусов) состоянием «A», а второе состояние (temp <80 градусов) состоянием «B». Мы назовем среднее состояние (temp = 80 градусов) состоянием «C». Как мы видим, мы определили поведение программ в состоянии A и состоянии B, но не в состоянии C.

Это общая идея государства. Вот определение, данное всезнающей Википедией:

«В теории информатики и автоматов состояние цифровой логической схемы или компьютерной программы — это технический термин для всей хранимой информации в данный момент времени, которая используется схемой или программой».

Короче говоря, это своего рода «комбинация» всей информации, которую программа учитывает.

Теперь мы собираемся сделать прыжок во что-то, что считается в значительной степени теоретическим и бесполезным, а затем каким-то образом соединиться с очень практичным миром REST.

Машины Тьюринга

Был этот человек по имени Алан Тьюринг, и он был довольно умным математиком, интересующимся работой компьютеров. Он придумал воображаемый компьютер (который, как мы увидим, на самом деле невозможно построить), который он использовал для рассуждений о том, что происходит в реальных компьютерах.

Компьютер состоит из ленты бесконечной длины, с головкой, через которую проходит лента. Лента имеет «ячейки», в которые может записываться информация (цифры, цвета и т. Д.). Лента движется через этот аппарат, влево или вправо, по одной ячейке за раз. Аппарат сканирует все, что уже находится на ленте, и, в зависимости от того, в каком состоянии он находится, записывает что-то обратно на ленту, а затем меняет свое состояние.

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

Это кажется довольно бесполезной теоретической фантазией (хотя, в этом нет абсолютно ничего плохого, прочитайте «Извинение математика», если вам интересно, почему люди интересуются теоретическими вещами). Тем не менее, это вполне возможно, самая фундаментальная концепция информатики.

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

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

Сеть

Затем появилась концепция интернета. Это место, где пакеты могут выходить из строя и пересылаться до тех пор, пока не достигнут своего места назначения. В общем, никогда не бывает полной передачи полных данных.

Клиенты приходят быстро и уходят вдвое быстрее. Таким образом, сохранение состояния клиента не имеет особого смысла при работе в сетевой системе.

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

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

Этот протокол был HTTP, и теория, которая выросла из работы над HTTP, была названа REST.

ОСТАЛЬНЫЕ

REST означает: REpresentational State Transfer. Это система, построенная на основе концепции «клиент-сервер», на которой построены сети (ну, кроме того, они также являются одноранговыми сетями, но клиент-сервер, возможно, является самой простой и наиболее проверенной архитектурой). Само название слегка вводит в заблуждение, поскольку сервер полностью не содержит состояний!

Есть несколько ограничений, которым должны следовать все системы, которые утверждают, что они «RESTful».

Прежде всего, это должна быть клиент-серверная система. Это ограничение было изменено в прошлом, но в формальном определении (и для правильной работы теории REST) ​​у нас есть серверы, к которым могут подключаться клиенты.

Сервер полностью без состояния. Это означает, что для каждого клиентского запроса к серверу никакое состояние не зарезервировано на сервере. Например, если клиент (использующий HTTP) запрашивает страницу индекса и затем запрашивает домашнюю страницу / user /, эти два запроса полностью независимы друг от друга. Клиент хранит все состояния системы (следовательно, у нас есть кнопка возврата).

Ответы от сервера должны быть кешируемыми, что означает, что на сервере должна быть система, которая идентифицирует ответы как кешируемые или нет, чтобы клиенты (например, веб-браузеры) могли воспользоваться кешем.

Наконец, мы должны иметь простой, чистый и унифицированный интерфейс. Если у вас есть некоторый опыт работы с HTTP, формы запросов очень просты. В основном это глаголы и существительные, которые очень легко разбираются и читаются человеком. SOAP — это еще одна форма сетевого протокола, которая полностью стирает это требование и поэтому с ним часто очень трудно работать.

Теперь, что влечет за собой все эти свойства, вместе взятые?

Последствия ОТДЫХА

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

Давайте сначала рассмотрим ограничение безгражданства на сервере, оно может быть самым важным (а также наиболее часто нарушаемым так называемыми RESTful-архитектурами) битом.

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

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

Единый интерфейс может быть просто самым важным. Работая с SOAP, я могу вам сказать, что простой формат HTTP — это благословение при попытке отладки серверного кода, и то же самое относится и к другим системам RESTful.

Проектирование системы RESTful

Допустим, нам нужно написать сервер, который будет возвращать котировки акций, а также сохранять список котировок акций для отслеживания (и пользователь может либо добавить, либо очистить список).

Это отличный случай для системы RESTful, потому что она по своей сути не зависит от личности клиента. Следовательно, серверу не нужно хранить какое-либо состояние о клиенте.

Сначала мы определим, как будет работать язык протокола (немного похоже на глаголы HTTP GET и POST):

GETQUOTE тикер — дает цену для конкретной акции
Тикер ADDTICKER — добавляет данный список в список
GETLIST — получает разделенный запятыми список акций в списке

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

И это все, что нужно сделать! Конечно, нам все еще нужно это реализовать, но общая идея системы довольно проста и понятна!

Вывод

Надеюсь, эта статья дала вам хорошее представление о REST.

Кроме того, я надеюсь, что теперь вы сможете вызывать людей, которые слишком часто употребляют термин «RESTful» — я могу вам сказать, их много!

Пожалуйста, задавайте любые вопросы в комментариях или пишите мне в Твиттере на @dhaivatpoincare 🙂