Подтвердить что ты не робот

Что означает состояние представления в REST?

Я читал по всей сети, чтобы получить точное значение двух слов:

ПРЕДСТАВИТЕЛЬСТВО СОСТОЯНИЯ

У меня есть сомнения. Я неправильно понимаю эти условия. Я хочу прояснить понимание с кем-то, как это хорошо.

Я понимаю, что есть ресурс, расположенный на сервере. SO Rest означает, что передача некоторого репрезентативного состояния этого ресурса клиенту.

Если у сервера есть ресурс x, то если мы можем сделать репрезентативное состояние y ресурса x и передать его по сети, то что означает REST, это правильно или что является правильным значением этого. может кто-нибудь объяснить мне это.

4b9b3361

Ответ 1

Представительный государственный перевод относится к передаче "представительства". Вы используете "представление" ресурса для перевода состояния ресурса, который живет на сервере, в состояние приложения на клиенте.

Ответ 2

Хотя REST не имеет гражданства, он имеет государственную передачу в своем имени. Это немного запутывает всех.

Stateless

Когда вы открываете веб-страницу в браузере, вы будете выступать в качестве потребителя услуг, а www-сервер будет выступать в качестве поставщика услуг, чтобы обслуживать вас с помощью веб-страницы. Если это обычное соединение, клиент и сервер будут выполнять рукопожатие и инициировать сеанс (называемый TCP-соединением).

После этого на основе поведения сервера и клиента состояние изменится на ESTABLISHED, IDLE, TIMEOUT и т.д. Но в REST мы используем HTTP-протокол, который является апатридом, то есть сервер не будет хранить никаких информацию о клиенте. Клиент отвечает за отправку всех деталей, требуемых сервером для обслуживания, что означает, когда мы вызываем URI http://somedomain:8080/senthil/services/page1 с сервера, у него достаточно информации о том, что клиент полностью обслуживает страницу1.

Передача состояния

Используя тот же пример, когда вы открываете веб-страницу с помощью некоторого URL-адреса для просмотра файла изображения (RESOURCE) на сервере, сервер www покажет вам (клиенту) изображение в некотором формате, т.е. ПРЕДСТАВЛЕНИЕ РЕСУРСА (файл изображения).

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

Наконец, представление ресурса (как изображение отображается клиенту), которое неявно изменяет состояние как сервера, так и клиента, называется REST.

Ответ 3

Каждый объект имеет некоторое состояние (данные) и поведение (методы). Чтобы передать клиенту состояние объекта на сервере в конкретный момент времени, необходимо какое-то представление, например, JSON или xml или любой другой формат.

Таким образом, REST предназначен для создания представления текущего состояния объекта и передачи этого представления по сети.

Ответ 4

Я думаю, что весь вопрос об озабоченности архитектурного стиля REST сводится к пониманию того, что автор, Рой Филдинг, имел в виду предложить в своей диссертации набор архитектурных принципов для построения архитектур, основанных на парадигма hipertext или hipermedia.

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

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

В этом видении Ipertext\Ipermedia является центром всего архитектурного стиля, предложенного Филдингом, и ключевой концепцией, позволяющей этой парадигме работать, является "репрезентативная (государственная) передача".

Я думаю, что "представительское" относится к понятию "передача" , а не к понятию "состояние", т.е. передача является представительной (представительского типа), и это, на мой взгляд, главная причина имени "Передача государственного представительства".

Итак, создавая приложение Restful, сначала создается архитектура, основанная на веб-компонентах, каждая из которых объединяется с другими в многоуровневой архитектуре клиент-сервер, отправляя каждому из них представление своего состояния.

Таким образом, front-end, первый клиент этой архитектуры, проходит через свои состояния, отображая представление состояний, сгенерированных компонентом или компонентами, которые он вызывает, поддерживая единый согласованный интерфейс, а не на "private" api.

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

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

Таким образом, это взаимодействие компонентов клиент-сервер состоит в обмене (передаче, передаче) представлениях состояний компонентов использования протокола без сохранения состояния.

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

Ответ 5

Значения ПРЕДСТАВИТЕЛЬСТВА ГОСУДАРСТВЕННОГО ПЕРЕВОДА - это ОТДЫХ

RESTful поставил DIRECT VERB в сервер

В примере с фактическим рассмотрением значение, введенное в VERB, обычно имеет HTTP GET и POST

Протокол SIMPLE очень похож на SOAP (имеет много сложностей!)

Если ответ не удовлетворен, пожалуйста, предоставьте более подробный вопрос.

У REST есть много вопросов для обсуждения, это тема многих блога и книги.

Ответ 6

Представьте диаграмму состояния - это будет сделано.

Простая диаграмма состояния LucidChart

Если это был набор веб-страниц, вы начинаете с целевой страницы Базовая программа для учащегося. По диаграмме, когда вы нажмете на ссылку "Далее", она перенесет вас на страницу Первоклассник - предположите, что студент закончил учебу. Нажав "next" несколько раз, вы попадаете на последнюю страницу.

Конечно, могут быть другие переходы, такие как "Главная", что позволяет перейти к странице по умолчанию.

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

Другой пример. Когда вы смотрите на эту страницу, вы находитесь в определенном идентифицируемом и воспроизводимом "местоположении" в веб-иерархии StackOverFlow.

Итак, RESTful State занимается навигацией.

Ответ 7

TL; DR

Representational state transfer или просто REST - это термин для обмена данными в четко определенных форматах с целью повышения функциональной совместимости. Посредством применения определенных ограничений должна быть достигнута развязка между клиентами и серверами, что делает первый более устойчивым, а второй - более гибким для изменений.

Представление ресурса является результатом применения сопоставления из текущего состояния ресурсов с четко определенным синтаксисом и структурой типов мультимедиа. Поэтому он тесно связан с согласованием контента, который определяет процесс согласования типа мультимедиа для преобразования состояния ресурсов в запрошенное представление (= синтаксис и структура).


REST можно рассматривать как метод, позволяющий отделить клиентов от серверов /API в распределенной системе, который дает серверной свободе возможность развиваться и изменять свою структуру в соответствии со своими потребностями, не нарушая реализации клиента.

Чтобы получить такую сильную выгоду, необходимо создать пару предварительных условий, так как почти ничего не приходит бесплатно. Здесь Филдинг определил пару ограничений, которые он дополнительно разъяснил (и объяснил) в своем хорошо известном блог-посте. Серверы не смогут достичь такой свободы, если клиенты не будут следовать подходу REST, а клиенты не смогут динамически исследовать дальнейшие возможности, если сервер не поддерживает клиентов в таких ситуациях. Короче говоря, обе стороны должны следовать одним и тем же принципам. Если этот подход не будет соблюден, прямая связь между сервером и клиентами останется, что приведет к сбоям, если сервер когда-либо изменится.

Но как на самом деле достигается разделение?

Во-первых, сервер должен поддерживать клиента при выполнении его задачи, включая URI, которые клиенты могут использовать. Наличие на сервере всех URI, которые клиент может вызвать из текущего состояния, в котором находится клиент, устраняет необходимость в клиенте заранее знать API и структуру URI.

Во-вторых, вместо того, чтобы позволить клиентам интерпретировать URI, серверы должны возвращать URI в сочетании с именами отношений ссылок. Т.е. вместо клиента, использующего (и интерпретирующего) URI, подобный http://server.org/api/orders, он должен использовать отношение ссылки, подобное new-order. Если сервер изменит указанный выше URI на то есть http://server.org/api/new-orders по какой-либо причине, клиенты, использующие имена отношений ссылок, все равно смогут выполнять свою задачу, в то время как для тех, кто использует URI напрямую, потребуется обновление, прежде чем они смогут продолжить.

Насколько мне известно, еще нет стандартов, в которых такие имена связей должны быть определены и задокументированы. Для ссылок коллекции семантика имен отношений, таких как self, prev, next, first и last, кажется достаточно значимой, хотя что-то более специфичное для предметной области, например, order или product-xyz, может и не иметь значения. Такая семантика может быть описана либо в специальных типах носителей, либо в новых стандартах.

До сих пор эти пункты касаются ограничения HATEOAS, но, к сожалению, это еще не все. Согласно сообщению в блоге Fieldings:

API-интерфейс REST должен потратить почти все свои описательные усилия на определение типов носителей, используемых для представления ресурсов и управления состоянием приложения, или на определение имен расширенных отношений и/или разметки с поддержкой гипертекста для существующих стандартных типов носителей.

Полевой далее комментарий, что:

REST API никогда не должен иметь "типизированных" ресурсов, значимых для клиента. Авторы спецификаций могут использовать типы ресурсов для описания реализации сервера за интерфейсом, но эти типы должны быть неактуальными и невидимыми для клиента. Единственными типами, которые являются значимыми для клиента, являются текущие представления медиа-типа и стандартизированные имена отношений.

типизированный ресурс - это ресурс, в котором клиент имеет предположение о содержимом. То есть клиент, который получил URI http://server.org/api/user/sam+sample с именем отношения ссылки user, определяет, что данные, принадлежащие этому ресурсу, описывают человека, и поэтому может попытаться упорядочить представление application/json данных ресурса в объекте Person.

Проблема с типизированными ресурсами состоит в том, что клиенты имеют определенные предварительно назначенные предположения или знания относительно данных, содержащихся в таких ресурсах, то есть пользовательский ресурс, который может варьироваться от сервера к серверу. В то время как один сервер может предоставлять имя пользователя как свойство name, другой сервер может использовать firstName и lastName, а клиент, который хочет сервер, каждую возможность практически не поддерживает. Кроме того, если сервер когда-либо изменит свою логику, клиенты могут сломаться с определенной вероятностью. Для противодействия этому типу связи следует использовать типы носителей.

Типы носителей, которые представляют собой удобочитаемое текстовое описание формата представления, определяют используемый синтаксис, а также структуру и семантику доступных элементов, содержащихся в документах, которыми обмениваются в этом формате. Поэтому приложения, соответствующие модели REST architectur, должны использовать установленные или пользовательские типы носителей для повышения совместимости. Вместо того, чтобы напрямую связывать клиент и сервер, оба фактически связываются с типами медиа. Поддержка таких типов носителей может быть обеспечена либо путем загрузки существующих библиотек, либо путем реализации спецификации с нуля. Даже загрузка таких типов носителей динамически через плагины возможна, если поддерживается.

Клиенты и серверы должны использовать согласование содержимого для согласования общего формата мультимедиа, понятного обеим сторонам, для обмена текущим состоянием ресурса. Согласование содержимого достигается путем предоставления заголовка HTTP Accept (и/или одного из его родных элементов), в котором перечислены типы MIME, которые клиент может или хочет обработать, в пределах запроса и сервером, отвечающим на один из запрошенных форматы, включая заголовок ответа HTTP Content-Type, чтобы информировать клиента о том, какое представление медиа-типа использовалось в действительности, или возвращать ответ о сбое 406.

Для приведенного выше примера пользователя клиенты могут отправлять HTTP-заголовок Accept со следующим содержимым: application/vcard+json, application/hal+json;q=0.6, application/json;q=0.1 серверу, который просит сервер вернуть состояние ресурса в синтаксисе и структуре, определенной одним из перечисленных носителей. типы. Кроме того, в нем указывается, что клиент предпочитает получать состояние, отформатированное в соответствии со спецификацией описания типа носителя application/vcard+json, и, если сервер не может этого сделать, ему следует предпочесть hal + json по сравнению с традиционным синтаксисом json. Сервер теперь либо отображает текущее состояние ресурса в один из запрошенных форматов, либо отвечает соответствующим сообщением об ошибке 406, если либо все запрошенные типы носителей неизвестны, либо состояние не может быть преобразовано в такую структуру или поддерживается представление по умолчанию клиентом.

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

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