REST API
準(zhǔn)備用一個(gè)簡(jiǎn)單的列子來(lái)描述什么是Representation,什么是State,以及什么是Representation State Transfer。
例如我訂閱了一個(gè)人的博客,想要獲取他發(fā)表的所有文章(這里『他發(fā)表的所有文章』就是一個(gè)資源Resource)。于是我就向他的服務(wù)發(fā)出請(qǐng)求,說(shuō)『我要獲取你發(fā)表的所有文章,最好是atom格式的』,這時(shí)候服務(wù)器向你返回了atom格式的文章列表第一頁(yè)(這里『atom格式的文章列表』就是表征Representation)。你看到了第一頁(yè)的頁(yè)尾,想要看第二頁(yè),這時(shí)候有趣的事情就來(lái)了。如果服務(wù)器記錄了應(yīng)用的狀態(tài)(stateful),那么你只要向服務(wù)詢問(wèn)『我要看下一頁(yè)』,那么服務(wù)器自然就會(huì)返回第二頁(yè)。類(lèi)似的,如果你當(dāng)前在第二頁(yè),想服務(wù)器請(qǐng)求『我要看下一頁(yè)』,那就會(huì)得到第三頁(yè)。但是REST的服務(wù)器恰恰是無(wú)狀態(tài)的(stateless),服務(wù)器并沒(méi)有保持你當(dāng)前處于第幾頁(yè),也就無(wú)法響應(yīng)『下一頁(yè)』這種具有狀態(tài)性質(zhì)的請(qǐng)求。因此客戶端需要去維護(hù)當(dāng)前應(yīng)用的狀態(tài)(application state),也就是『如何獲取下一頁(yè)資源』。當(dāng)然,『下一頁(yè)資源』的業(yè)務(wù)邏輯必然是由服務(wù)端來(lái)提供。服務(wù)器在文章列表的atom表征中加入一個(gè)URI超鏈接(hyper link),指向下一頁(yè)文章列表對(duì)應(yīng)的資源。客戶端就可以使用統(tǒng)一接口(Uniform Interface)的方式,從這個(gè)URI中獲取到他想要的下一頁(yè)文章列表資源。上面的『能夠進(jìn)入下一頁(yè)』就是應(yīng)用的狀態(tài)(State)。服務(wù)器把『能夠進(jìn)入下一頁(yè)』這個(gè)狀態(tài)以atom表征形式傳輸(Transfer)給客戶端就是表征狀態(tài)傳輸(REpresentational State Transfer)這個(gè)概念。
舉個(gè)具體API的例子:
請(qǐng)求: GET /posts HTTP/1.1 Accept: application/atom+xml響應(yīng): HTTP/1.1 200 OK Content-Type: application/atom+xml<?xml version="1.0" encoding="utf-8"?> <feed xmlns="http://www.w3.org/2005/Atom"><title>Posts</title><link href="http://example.org/posts" rel="self" /><link href="http://example.org/posts?pn=2" rel="next" /><id>urn:uuid:60a76c80-d399-11d9-b91C-0003939e0af6</id><updated>2003-12-13T18:30:02Z</updated><entry><title>Post XXX</title><link href="http://example.org/post-xxx" /><id>urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a</id><updated>2003-12-13T18:30:02Z</updated><content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>This is the post content.</p></div></content></entry><entry>...</entry> </feed> 注意上面atom格式中的多個(gè)<link>元素,它們分別定義了當(dāng)前狀態(tài)下合法的狀態(tài)轉(zhuǎn)移。
作者:季文昊
鏈接:http://www.zhihu.com/question/28557115/answer/48120528
來(lái)源:知乎
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。
例如我訂閱了一個(gè)人的博客,想要獲取他發(fā)表的所有文章(這里『他發(fā)表的所有文章』就是一個(gè)資源Resource)。于是我就向他的服務(wù)發(fā)出請(qǐng)求,說(shuō)『我要獲取你發(fā)表的所有文章,最好是atom格式的』,這時(shí)候服務(wù)器向你返回了atom格式的文章列表第一頁(yè)(這里『atom格式的文章列表』就是表征Representation)。你看到了第一頁(yè)的頁(yè)尾,想要看第二頁(yè),這時(shí)候有趣的事情就來(lái)了。如果服務(wù)器記錄了應(yīng)用的狀態(tài)(stateful),那么你只要向服務(wù)詢問(wèn)『我要看下一頁(yè)』,那么服務(wù)器自然就會(huì)返回第二頁(yè)。類(lèi)似的,如果你當(dāng)前在第二頁(yè),想服務(wù)器請(qǐng)求『我要看下一頁(yè)』,那就會(huì)得到第三頁(yè)。但是REST的服務(wù)器恰恰是無(wú)狀態(tài)的(stateless),服務(wù)器并沒(méi)有保持你當(dāng)前處于第幾頁(yè),也就無(wú)法響應(yīng)『下一頁(yè)』這種具有狀態(tài)性質(zhì)的請(qǐng)求。因此客戶端需要去維護(hù)當(dāng)前應(yīng)用的狀態(tài)(application state),也就是『如何獲取下一頁(yè)資源』。當(dāng)然,『下一頁(yè)資源』的業(yè)務(wù)邏輯必然是由服務(wù)端來(lái)提供。服務(wù)器在文章列表的atom表征中加入一個(gè)URI超鏈接(hyper link),指向下一頁(yè)文章列表對(duì)應(yīng)的資源。客戶端就可以使用統(tǒng)一接口(Uniform Interface)的方式,從這個(gè)URI中獲取到他想要的下一頁(yè)文章列表資源。上面的『能夠進(jìn)入下一頁(yè)』就是應(yīng)用的狀態(tài)(State)。服務(wù)器把『能夠進(jìn)入下一頁(yè)』這個(gè)狀態(tài)以atom表征形式傳輸(Transfer)給客戶端就是表征狀態(tài)傳輸(REpresentational State Transfer)這個(gè)概念。
舉個(gè)具體API的例子:
請(qǐng)求: GET /posts HTTP/1.1 Accept: application/atom+xml響應(yīng): HTTP/1.1 200 OK Content-Type: application/atom+xml<?xml version="1.0" encoding="utf-8"?> <feed xmlns="http://www.w3.org/2005/Atom"><title>Posts</title><link href="http://example.org/posts" rel="self" /><link href="http://example.org/posts?pn=2" rel="next" /><id>urn:uuid:60a76c80-d399-11d9-b91C-0003939e0af6</id><updated>2003-12-13T18:30:02Z</updated><entry><title>Post XXX</title><link href="http://example.org/post-xxx" /><id>urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a</id><updated>2003-12-13T18:30:02Z</updated><content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>This is the post content.</p></div></content></entry><entry>...</entry> </feed> 注意上面atom格式中的多個(gè)<link>元素,它們分別定義了當(dāng)前狀態(tài)下合法的狀態(tài)轉(zhuǎn)移。
作者:季文昊
鏈接:http://www.zhihu.com/question/28557115/answer/48120528
來(lái)源:知乎
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。
轉(zhuǎn)載于:https://www.cnblogs.com/double12gzh/p/10166190.html
總結(jié)
- 上一篇: Shell脚本[运算表达式,条件控制语句
- 下一篇: 结对编程——四则运算