(Translated by https://www.hiragana.jp/)
表现层状态转换 - 维基百科,自由的百科全书 とべ转到内容ないよう

おもて现层じょう态转换

本页使用了标题或全文手工转换
维基百科ひゃっか自由じゆうてき百科ひゃっかぜん
重定しげさだこうREST

おもて现层じょう态转换えいRepresentational State Transfer縮寫しゅくしゃRESTこれRoy Thomas FieldingえいRoy Thomas Fielding博士はかせ于2000ねんざいてき博士はかせ论文[1]ちゅう提出ていしゅつらいてきいちまん维网软件风格,目的もくてき便びん于不どう软件/ほどじょざい网络(れい如互联网)ちゅう互相传递しんいき表現ひょうげんそう狀態じょうたい轉換てんかん根基こんき超文ちょうぶんほんでん協定きょうてい(HTTP)これじょう確定かくていてきいちくみ約束やくそく屬性ぞくせい一種設計提供全球資訊網絡服務的軟體構建風格ふうかく符合ふごうあるあいよう於這しゅ構風かく(簡稱ため REST ある RESTful)てきもうからま服務ふくむ允許いんきょようはし發出はっしゅつ統一とういつ資源しげん標識ひょうしきそん操作そうさもうからま資源しげんてき請求せいきゅう,而與あずかせん定義ていぎこのみてき狀態じょうたい操作そうさしゅう一致いっちよし表現ひょうげんそう狀態じょうたい轉換てんかん提供ていきょうりょうざい互聯もうからまてき計算けいさん系統けいとうあいだ彼此ひし資源しげん交互こうご使用しようてききょうさく性質せいしつ(interoperability)。相對そうたい於其它種類しゅるいてきもうからま服務ふくむれい如SOAP服務ふくむのり本身ほんみしょ定義ていぎてき操作そうさしゅうらいそんもうからまうえてき資源しげん

目前もくぜんざいさん种主りゅうてきWebふく实现方案ほうあんちゅういん为RESTしきあずか复杂てきSOAPXML-RPCそうさら简洁,越来ごえくえつてきWebふく务开はじめさいようREST风格设计实现。れい如,Amazon.com提供ていきょう接近せっきんREST风格てきWebふく執行しっこう图书查詢;まさとら提供ていきょうてきWebふく务也REST风格てき

要点ようてん及标じゅん

[编辑]

需要じゅよう注意ちゅういてき,REST设计风格而标准。REST通常つうじょうもとHTTPURIXML以及HTML这些现有てき广泛流行りゅうこうてき协议标准。

  • 资源ゆかりURIらい指定してい
  • 对资げんてき操作そうさ包括ほうかつ获取、创建、おさむあらため删除,这些操作そうさただしこう对应HTTP协议提供ていきょうてきGET、POST、PUTDELETE方法ほうほう
  • つう操作そうさ资源てきひょう现形しきらい操作そうさ资源。
  • 资源てきひょう现形しき则是XMLあるものHTML,决于读者つくえ还是じんしょう费Webふく务的きゃく户软けん还是Web浏览当然とうぜん也可以是にんなん其他てき格式かくしきれい如JSON。

じゅうしんひょう达的じょう态迁うつりてきとくせい

[编辑]
  • Uniform Interface:统一せっこう
    1. 以资げん为基础

      まい个资みなもと以通过URI访问到。

      也就一个个可以认知的资源,如文档,おと乐,视频とうしんいき以通过唯いちてきURI确定。

    2. つう过重ひょう达的きゃく户端管理かんりげん资源

      就是わが们通过客户端以修あらためげん资源てきじょう态。

    3. かえしかいしんじいきあし够描じゅつ自己じこ

      这样じゅうひょう达的きゃく户端以知どう如何いか处理。

    4. ちょう媒体ばいたい应用じょう态的引擎

      处理以超媒体ばいたい为基础的じょう态变

  • Stateless:无状态。
  • Cacheable:缓存。
  • Client-Server:きゃく户服务器ぶん离模しきにんなん一个客户端与服务器都是可替换的。
  • Layered System:ぶん层的けい统,きゃく户端不知ふちどう联系てきさい终服务器。
  • Code on Demand(选):ふく务器以将能力のうりょく扩展いたきゃく户端,如果きゃく户端以执ぎょうてき话。这个こうのう选择てき

REST构的げんせい条件じょうけん

[编辑]

REST构风かくさい重要じゅうようてき构限せいゆう6个[2]

  1. きゃく户端-ふく务器(Client-Server)
    • きゃく户端-ふく务器结构げんせいてき目的もくてきはたきゃく户端和服わふく务器はしてき关注てんぶん离。しょうよう户界めんしょ关注てき逻辑すうすえそん储所关注てき逻辑ぶん离开らいゆうじょ于提だかよう户界めんてきまたが平台ひらだいてき移植いしょくせいつう过简ふく务器块也ゆうじょ于服务器块的扩展せい
  2. 无状态(Stateless)
    • ふく务器不能ふのう保存ほぞんきゃく户端てきしんいきごと一次从客户端发送的请求中,よう包含ほうがん所有しょゆうてき必须てきじょう态信いきかい话信いきよしきゃく户端保存ほぞんふく务器はしすえ这些じょう态信いきらい处理请求。
    • ふく务器以将かい话状态信いき传递给其ふく务,如数すえ库服务,这样保持ほじ一段时间的状态信息,从而实现认证こうのう
    • とうきゃく户端以切换到一个新状态的时候发送请求信息。
    • とう一个或者多个请求被发送之后,きゃく户端就处于一个状态变迁过程中。まいいち个应ようてきじょう态描じゅつ以被きゃく户端ようらいはつはじめ一次的状态变迁。
  3. 缓存(Cacheability)
    • 如同まん维网いち样,きゃく户端ちゅう间的どおり讯传递者以将かいくつがえ缓存おこりらいかいくつがえ必须あかり确的あるもの间接てき表明ひょうめい本身ほんみいや以进ぎょう缓存,这可以预ぼうきゃく户端ざい将来しょうらい进行请求てき时候いた陈旧てきあるもの恰当てきすうすえ管理かんり良好りょうこうてき缓存つくえせい以减しょうきゃく户端-ふく务器间的交互こうご,甚至完全かんぜん避免きゃく户端-ふく务器交互こうご,这进一步提了高性能和可扩展性。
  4. 统一せっこう(Uniform Interface)
    • 這是 RESTful けい统设计的基本きほん发点。它简りょうけい统架构,减少りょう耦合せい以让所有しょゆう各自かくじ独立どくりつてき进行あらため进。包括ほうかつれつよん个限せい
      1. 请求ちゅう包含ほうがん资源てき ID(Resource identification in requests)

        请求ちゅう包含ほうがんりょうかく独立どくりつ资源てき标识,れい如,ざいWebふく务中てきURI。资源本身ほんみ发送给客户端てき标识独立どくりつれい如,ふく务器以将自身じしんてきすうすえ库信いき以HTML、XMLあるものJSONてき方式ほうしき发送给客户端,ただし这些能都のとふく务器てき内部ないぶ记录方式ほうしき

      2. 资源どおり过标识来操作そうさ(Resource manipulation through representations)

        とうきゃく户端拥有一个资源的标识,包括ほうかつ带的もとすうすえ,则它就有あし够的しんいきらい删除这个资源。

      3. 消息しょうそくてき自我じが描述せい(Self-descriptive messages)

        まい一个消息都包含足够的信息来描述如何来处理这个信息. れい如,媒体ばいたい类型 (media-type) 就可以确てい需要じゅよう什么样的分析ぶんせきらい分析ぶんせき媒体ばいたいすうすえ.

      4. もちいちょう媒体ばいたい驱动应用じょう态(Hypermedia as the engine of application state (HATEOAS))

        どうよう户访问Webふく务器てきHome页面相似そうじとういち个 REST きゃく户端访问りょう最初さいしょてきREST应用てきURIきさき,REST きゃく户端应该使用しようふく务器はし提供ていきょうてき链接,动态てき发现所有しょゆうてき可用かようてき资源执行てき操作そうさずい访问てき进行,ふく务器ざい响应ちゅう提供ていきょう文字もじちょう链接,以便きゃく户端以得いたとうぜん可用かようてき操作そうさきゃく户端无需よう确定てき编码てき方式ほうしき记录ふく务器はししょ提供ていきょうてき动态应用てき结构しんいき

  5. ぶん层系统(Layered System)
    • きゃく户端一般不知道是否直接连接到了最终的服务器,あるものみちじょう的中てきちゅう间服务器。ちゅう间服务器以通过负载均衡きんこうどもとおる缓存てきつくえせいひさげだかけい统的扩展せい,这样可也かなり便びん于安ぜん策略さくりゃくてき部署ぶしょ
  6. 按需だい码(Code-On-Demand,选)
    • ふく务器以通过发おく执行だい码给きゃく户端てき方式ほうしき临时せいてき扩展こうのうあるものじょうせいこうのうれい如Java Applet、FlashあるJavaScript。

关于じょう

[编辑]

应该注意ちゅうい别应ようてきじょう态和连接协议てきじょう态。HTTP连接无状态的(也就记录ごと个连せってきしんいき),而REST传输かい包含ほうがん应用てき所有しょゆうじょう态信いきいん此可以大幅おおはばくだてい对HTTP连接てきじゅう复请もとめ资源消耗しょうもう

應用おうよう於Web服務ふくむ

[编辑]

符合ふごうREST設計せっけい風格ふうかくてきWeb APIしょうRESTful API。它从以下いか三个方面资源进行定义:

  • ちょく观简たんてき资源:URI,如:http://example.com/resources
  • 传输てき资源:Webふく务接受与かえしかいてき互联网媒体ばいたい类型如:JSONXMLYAMLひとし
  • 对资げんてき操作そうさ:Webふく务在该资げん上所かみところ支持しじてきいち系列けいれつ请求方法ほうほう如:POST,GET,PUTあるDELETE)。

下表かひょうれつりょうざい实现RESTful API时HTTP请求方法ほうほうてき典型てんけい用途ようと

HTTP请求方法ほうほうざいRESTful APIちゅうてき典型てんけい应用[3]
资源 GET PUT POST DELETE
いち组资げんてきURI,https://example.com/resources れつURI,以及该资げん组中ごと个资げんてき详细しんいききさきしゃ选)。 使用しよう给定てきいち组资げんがえとうぜんせい组资げん ざいほん组资げんちゅう创建/追加ついかいち个新てき资源。该操さく往往おうおうかえしかいしん资源てきURL。 删除せい组资げん
单个资源てきURI,https://example.com/resources/142 获取指定していてき资源てき详细しんいき格式かくしき以自选一个合适的网络媒体类型(如:XML、JSONとう がえ换/创建指定していてき资源。并将其追加ついかいたあい应的资源组中。 指定していてき资源とう做一个资げん组,并在其下创建/追加ついかいち个新てき元素げんそ使つかい其隶ぞく于当ぜん资源。 删除指定していてき元素げんそ

PUTDELETE方法ほうほう幂等方法ほうほう。GET方法ほうほう安全あんぜん方法ほうほうかい对服务器はしゆうおさむあらためいん當然とうぜん也是幂等てき)。

ぞうもとSOAPてきWebふく务,RESTful Webふく务并ぼつゆう正式せいしきてき标准[4]。这是いん为RESTいち种架构,而SOAPただいち个协议。虽然RESTいち个标なぞらえただしだい部分ぶぶんRESTful Webふく务实现会使用しようHTTPURIJSONXMLひとしかく种标じゅん

实现举例

[编辑]

れい如,一个简单的网络商店应用:

  1. れつ所有しょゆう商品しょうひん
    GET http://www.store.com/products
  2. ていげんぼういちけん商品しょうひん
    GET http://www.store.com/products/12345
  3. しも单购买:
    POST http://www.store.com/orders
    <purchase-order>
      <item> ... </item>
    </purchase-order>

RESTてき优点

[编辑]
  • さらだかこう利用りよう缓存らいひさげだか响应速度そくど
  • つう本身ほんみてき无状态性以让不同ふどうてきふく务器てき处理一系列请求中的不同请求,ひさげだかふく务器てき扩展せい
  • 浏览そくさく为客户端,简化软件需求
  • あい对于其他叠加ざいHTTP协议これじょうてきつくえせい,RESTてき软件赖性さらしょう
  • 需要じゅよう额外てき资源发现つくえせい
  • ざい软件わざ术演进中てき长期てきけんようせいさらこのみ

实现

[编辑]

参考さんこう文献ぶんけん

[编辑]

引用いんよう

[编辑]
  1. ^ Fielding, Roy Thomas. Chapter 5: Representational State Transfer (REST). Architectural Styles and the Design of Network-based Software Architectures (学位がくい论文). University of California, Irvine. 2000 [2016-12-29]. (原始げんし内容ないようそん于2021-05-13). This chapter introduced the Representational State Transfer (REST) architectural style for distributed hypermedia systems. REST provides a set of architectural constraints that, when applied as a whole, emphasizes scalability of component interactions, generality of interfaces, independent deployment of components, and intermediary components to reduce interaction latency, enforce security, and encapsulate legacy systems. 
  2. ^ 理解りかいRESTful. [2016-03-18]. (原始げんし内容ないようそん于2018-11-02). 
  3. ^ Richardson, Leonard; Ruby, Sam, RESTful Web Services, O'Reilly, 2007(May 8, 2007), ISBN 0596529260 
  4. ^ Elkstein, M. What is REST?页面そん档备份そん互联网档あん). Retrieved on 2009-07-04.

らいみなもと

[编辑]