2014-08-29 93 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?