我一直在阅读所有过网获得的两个词的确切含义:
代表性状态
我有个疑问。 我误解这些条款。 我想澄清一些一个人如何有这个好主意理解。
我的理解是,有位于服务器的资源。 SO休息意味着,传递这种资源的某种具象状态到客户端。
如果服务器有一个资源X,那么如果我们可以让资源X的具象状态y和转移过来的网站是什么样的刀架装置,这是正确的或者什么是它的正确含义。 可能有人解释我这一点。
我一直在阅读所有过网获得的两个词的确切含义:
代表性状态
我有个疑问。 我误解这些条款。 我想澄清一些一个人如何有这个好主意理解。
我的理解是,有位于服务器的资源。 SO休息意味着,传递这种资源的某种具象状态到客户端。
如果服务器有一个资源X,那么如果我们可以让资源X的具象状态y和转移过来的网站是什么样的刀架装置,这是正确的或者什么是它的正确含义。 可能有人解释我这一点。
表述性状态转移,是指转让“交涉”。 您正在使用的资源的“表示”,以转移其居住的服务器到应用状态在客户端上的资源状态。
虽然REST是无状态的,它的名称中的状态转移。 这是一个有点有点混乱给大家。
无状态
当你在浏览器中打开一个网页,你将作为一个服务消费者和WWW服务器将作为服务提供商为您服务与网页。 如果是正常的连接,客户端和服务器都将执行握手,并发起会话(称为TCP连接)。
在此之后,基于服务器和客户端的行为,国家将更改为ESTABLISHED,空闲,超时等,但在休息,我们使用的是HTTP协议是无状态的,这意味着服务器不会存储任何会话信息客户端。 客户端是负责将所有的服务器所需的详细信息,以获得服务,这意味着当我们调用URI http://somedomain:8080/senthil/services/page1
从服务器,它具有对客户服务不够详细信息第1页完全。
状态转移
在一些格式即资源表示在相同的例子,当你使用一些URL查看服务器上的图像文件(资源),打开一个网页,WWW服务器会告诉你(客户端)的图像(图像文件)。
在此过程中,服务器的资源恒定状态 (即,其存储在服务器数据库中的图像文件的状态)将在客户端的可理解的格式即应用程序的状态来表示到客户端。 因此,资源状态将关于保持不变的客户,只有资源的表现会有所改变,这反过来会改变应用程序的状态。
最后,资源的表示(图像是如何显示到客户端),这暗示改变服务器和客户端的状态被称为REST。
每个对象具有一定的状态(数据)和行为(方法)。为了在特定情况下的时间对服务器传输对象的状态到客户端,某种表示的是需要像JSON或XML或任何其它格式。
因此,REST是如何创建对象的当前状态的表示和传递的是表示通过网络。
我认为,关于REST架构风格的关注整个问题,绕到理解,即作者,罗伊菲尔丁,在他的脑海中他的论文建议的基础上,hipertext或一组架构原则构建架构hipermedia范例。
这种模式,我认为,是中央重点了解这一重要议题。
的组织提议由Roy Fielding客户端 - 服务器应用程序的架构风格的背后,我认为这是一个现代的客户端 - 服务器应用程序的具体想法,即由被一种发动机的执政应用状态转换,其状态有可能扩展到无穷。
在这一愿景,Ipertext \ Ipermedia是菲尔丁和关键的概念,让这个范例作品是“具象(状态)转移”提出,整个建筑风格的中心。
我认为,“具象”指的不是关于“国家”的概念,关于“转让”的概念 ,也就是说,它是转移是表象(具象型的),那就是,在我看来,名称为“具象状态传输”的主要原因。
因此,在设计RESTful应用程序,它是设计第一款基于组件的网络上的建筑,它们中的每comunicates与他人在客户端-服务器分层架构模型,送他们每个人的状态的表示。
因此,在前端,该架构的第一客户端,通过它的状态转变表示由组分或组分sended状态的rapresentation,即它调用一个均匀一致的界面上,而不是在“私有” API赞同。
甲这样类型的应用,在作者的思想,是潜在地可扩展到无限大的状态,因为它的状态不依赖于私有API,但取决于一个univoque标识符系统(如URI)由在该架构中的所有代理共享,在少数一些动词来管理其状态,并商定共同代表性传输系统,或加上创成。
这种转变通过构成该“公共”的API,它应属于由组件客户端 - 服务器所使用的无状态的通信协议中的动词其代表性的通信给被叫服务器组件结束。
在一个这样的方式,这个客户端 - 服务器交互的组件在由交换(传送,进行通信),使用无状态协议的组件的状态的表示。
和核心概念,它允许所有这些架构潜在本身延伸到无限的是,他们的赞同架构代表性转移。
该表述性状态转移的含义是REST
REST风格已经把DIRECT动词到服务器
在实际的分析例,价值投入动词有常用的HTTP GET和POST
有一个像SOAP SIMPLE协议多UN(具有复杂得多!)
如果答案有不满意,请提供更详细的问题
REST有讨论的话题很多,是许多博客和书籍的主题
想象一下,一个状态图 - 下面将做。
如果这是一套网页,你就开始在本科生着陆页的学生。 每个图中,当你点击“下一步”链接,它会带你到新生页-假设学生已经毕业。 点击“下一步”多次,你到了最后一页。
当然,也有可能是其他的转换,如“家”,让您跳转到默认页面。
该网站的可见状态无关,与服务器如何在内部实现这种关联 - 这是内部状态。 它可能涉及多个数据库,服务器,什么不是。 学生可以毕业,他/她的状态可能已经通过其他方法更新。 客户端是不知道这些细节 - 但总是可以期待得到一个连贯的可视状态(集)的人(或机器)的消费。
另一个例子:当你在看这个页面,你在计算器网络层次结构中的特定的识别和可重复的“位置”。
因此,具有导航的RESTful国家交易。
TL; DR
Representational state transfer
或简单REST是为了增加的互操作性在交换明确定义的格式的数据的术语。 通过某些限制来自客户端的去耦到服务器应该achived这使得前者更强大,后者更灵活地改变应用程序。
资源表示是应用从资源的当前状态的映射到明确定义的语法和结构的媒体类型的结果。 据therfore高度加上内容协商定义商定一种媒体类型的资源状态转换成所请求的表示(=语法和结构)的过程。
REST可以被看作是一个技术解耦服务器/客户端的API在分布式系统中,其给出了服务器端自由发展和改变其结构其需要在不破坏客户端实现。
为了获得这样一个很大的好处几个前提条件必须到位,因为几乎没有一样是免费的。 菲尔丁这里定义一对夫妇,他在他的进一步澄清(和解释)约束的知名博客,帖子 。 服务器将无法达到这样的自由,如果客户不遵守REST方法以及客户端将不能够动态地探索进一步的可能性,如果服务器不支持客户这样。 总之,双方都需要遵循同样的原则。 如果方法不遵循严格的服务器和客户端之间的直接连接将保持,这将导致失败,如果服务器永远不会改变。
但是如何去耦实际实现的?
首先,服务器应支持通过包含的URI的客户可以使用下面的任务有一个客户端。 有一个服务器提供所有的URI,客户端可以从当前状态的客户端是在调用不再需要客户端有API的先验知识和URI是如何构成的。
二,而不是让客户解释的URI,服务器应该结合链接关系的名字返回的URI。 使用(和解释)客户端的URI一样的Ieinstead 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博客文章:
一个REST API应该花费几乎所有的描述努力在确定用于表示资源和推动应用程序状态的媒体类型(S),或在定义扩展的关系名称和/或支持超文本标记了现有的标准媒体类型。
进一步菲尔丁commentet说:
一个REST API不应该“类型化”是给客户显著资源。 规范作者可以使用的资源类型描述背后的接口服务器实现,但这些类型必须是不相关的,不可见的客户端。 唯一的类型有显著到客户端是当前表示的介质类型和标准化的关系名称。
一个类型的资源就是客户端有内容的preassumption的资源。 即谁收到了URI客户http://server.org/api/user/sam+sample
的链接关系名user
确定属于该资源数据描述一个人,因此可以尝试封送一个application/json
的表示资源数据到一个Person
的对象。
同类型资源的问题是,客户有一定的预先分配的假设或包含在这些资源中的数据的知识,即可能有所不同,虽然从服务器到服务器的用户资源。 当一台服务器可以公开为用户名name
属性的其他服务器可以使用firstName
和lastName
,并且希望服务器客户端的每个可能性几乎难以维护。 此外,如果服务器发生了改变,它的逻辑的客户可能会破坏某些难熬的可能性。 为了应对这种耦合介质类型应改为使用。
媒体类型,这是一个表示格式的人类可读的文本描述,定义该格式交换中使用的语法以及结构和包含在文件可用的元素的语义。 因此REST architectur模式下应用程序应该使用建立或定制的媒体类型,以增加互操作性。 而不是直接连接客户端和服务器,夫妻双方实际的媒体类型。 可以通过装载现有的库或通过实施从头说明书被提供用于这样的媒体类型的支持。 即使通过插件动态加载这样的媒体类型是可能的,如果支持的话。
客户端和服务器应该使用内容协商对双方了解常见的媒体类型格式同意交换资源的当前状态。 内容协商是通过提供一个HTTP实现Accept
首标(和/或它的兄弟姐妹中的一个),其中列出了MIME类型的客户机是能够或愿意处理,请求内并且由服务器或者在所请求的格式之一,包括响应一个Content-Type
的HTTP响应报头通知哪些媒体类型的表示实际使用或者返回一个客户端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是用于通过依赖于良好定义的媒体类型,以实现高的互操作性和使用等内容negotiaion和HATEOAS特征解耦从服务器的客户端的技术。 作为回报客户将获得稳健的变化,因此需要在generall少维护,而服务器获得的能够发展和改变的好处,而不必担心客户端将无法一次变化都出现在与它进行交互。
像标准化有意义的链接关系的名称,自定义依赖于域的媒体类型和映射过程中的某些东西转变状态到媒体类型适用表示需要先设置,这是TBH一个不平凡的任务,但一经面世,他们提供上述好处。