2014-08-29 90 views
0

我瞭解一個寧靜服務的基礎知識以及它如何允許異構應用程序的可伸縮性。Restful網頁/網站

但是,如何創建一個寧靜的網頁?例如:

https://stackoverflow.com/questionss/99999

該URL看起來很寧靜給我,但在JSON或XML傳統的反應會如何創建一個像你現在查看的網頁?

這些端點如何處理html?任何人都可以用JAX-RS和Servlets來描述這個過程嗎?

回答

1

一個網頁不是REST風格,但產生的服務可能是。我特別不瞭解JAX-RS,但總體思路與任何其他動態Web服務沒有任何區別 - 服務解釋請求URI並呈現適當的響應。是什麼讓它成爲RESTful實際上只是構建和解釋URI的方法。

也許關於理解REST的最棘手的事情一般是接受基本思想是非常簡單和通用的

1

您正在將RESTful與HTML混合使用。

REST (Representational State Transfer)描述了一種基於HTTP協議及其操作(GET,POST,PUT,DELETE等)以及響應狀態代碼的體系結構樣式,它主要針對Web資源。

它使用URI來定位本地或遠程資源,其中運行服務(即,JAX-RS服務)的後端服務器正在偵聽特定路徑段並將處理任何超過特定基本URL的內容。即服務可能在http://company.com上運行,並已將路徑/rest/products分配給它。該服務現在將監聽http://company.com/rest/products/...的任何調用,並從URL的其餘部分提取某些參數以基於您調用服務器的HTTP方法處理某個請求。在http://company.com/rest/products/gtin/12345678上的GET請求可以f.e.請求全球貿易商品編號爲12345678的產品信息。

服務器將返回哪個內容。使用JAX-RS f.e.提供上述要求的一類看起來是這樣的:

@Path("/rest/products") 
public class ProductResource { 
    @GET 
    @Produces("application/json") 
    @Path("/gtin/{gtin}") 
    public Response getProductByGTIN(@PathParam("gtin") int gtin) { 
     ... 
    } 

    @POST 
    @Consumes("application/xml") 
    @Produces("text/html") 
    @Path("/") 
    public Response addNewProductViaXML(ProductJAXBClass product) { 
     ... 
    } 
} 

在URL中的調用上面的例子上面會嘗試返回JSON格式的響應,如果一個JSON提供可用(org.json或傑克遜FE )。如果您通過HTTP POST操作調用http://company.com/rest/products,併發送服務器可以理解的格式的XML文檔,請求的主體中可以動態地向服務添加新產品。

HTML可能只是Web服務器/服務返回的許多文檔格式之一。你實際從服務器收到的東西主要取決於服務器端。您可以設置某些客戶機標題,告訴服務器您希望接收哪種文檔 - 但服務器不會被迫接受這些標題。

儘管HTML在某種意義上可能意味着它主要針對人類,但RESTful服務不是針對任何人,而是針對接收到的請求 - 如果它們適用於人類或其他計算機,則只要它們是能夠理解請求並具有可用於將對象轉換爲響應的內容處理程序。

+0

是否適合向類似於servlet的jsp文件轉發?我只是不明白如何將資源格式化爲網頁。 – javajaba 2014-08-29 23:10:11

+0

一般而言,您可以將重定向用作HTTP響應代碼(與任何其他狀態碼一樣)。但是,這會創建不同的語義。而不是服務器回答「我理解你的要求就是答案」,你會得到類似於「我瞭解你的請求,但更好地查看x的答案」。在JAX-RS中,你可以[或者只是加載一個靜態頁面並返回它的字節](http://stackoverflow.com/questions/11489929/how-to-return-actual-html-file-using-jax-rs),動態創建您自己的HTML答案或者我們[第三方庫](https://code.google.com/p/htmleasy/) – 2014-08-31 00:58:23

1

時下REST經常被簡化爲通過HTTP將數據作爲JSON(或者有時是XML)傳輸的服務。這並不意味着您的網頁並不安寧。

讓我們來看看只有兩個點的RESTful架構的Uniform Interface constraint的:

識別資源:是(一般)鑑定通過URI資源,他們是獨立於他們的表現。因此,如果您使用JSON或XML作爲表示形式,則/customers/4711之一,並且相同資源獨立。客戶端可以發送包含一個或多個MediaTypes的頭文件,並通過內容協商服務器可以找到最適合的格式。 因此,將數據也作爲HTML提供是非常安靜的,因爲這是瀏覽器默認使用的MediaType。說使用標準格式的網絡並不安寧,這沒有任何意義。 (提示:當Roy Fielding寫關於REST JSON的his Ph.D沒有發明時)。

超媒體作爲應用程序狀態的引擎:這個想法是客戶端只知道應用程序的入口點。該響應包含客戶如何進行的所有信息。根據客戶端做出的選擇,服務器可以爲下一步提供所有信息等等。這是網頁從一開始就通過簡單地使用超鏈接做得很好的事情。今天的許多「RESTful服務」仍然缺乏這一重要特性。 再舉一個例子網頁如何遵循這一原則是HTML形式:(摘自「REST: I don't Think it Means What You Think it Does」 - 斯特凡Tilkov/GOTO阿姆斯特丹2014):

<form action='http://example.com/search' method='GET'> 
    Search for: <input type='text' name='query'> 
    <input type='submit'> 
</form> 

服務器提供了一個易於理解的配方客戶如何構建下一個URI。

不要忽略你關於JAX-RS的問題:你的資源類可以生成text/html,但是你的工作是用你選擇的模板引擎生成這個HTML。或者你可以簡單地使用JPS。另請參閱:The return of JSPs in HTML5?