我了解restful服务的基础知识以及它如何实现异构应用程序的可伸缩性。
但是创建一个宁静的网页呢?例如:
这个网址看起来非常安静,但是JSON或XML中的传统响应如何创建一个类似您现在正在查看的网页?
这些端点如何处理html?任何人都可以描述有关JAX-RS和Servlets的这个过程吗?
答案 0 :(得分:1)
网页不是RESTful,但生成的服务可能是。我并不特别了解JAX-RS,但总的想法与任何其他动态Web服务没有任何不同 - 服务解释请求URI并呈现适当的响应。使RESTful成为真正的只是构建和解释URI的方法。
一般来说理解REST的最棘手的事情就是接受基本思想极简单和通用。
答案 1 :(得分:1)
您正在将RESTful与HTML混合使用。
REST (Representational State Transfer)描述了一种基于HTTP协议及其操作(GET,POST,PUT,DELETE,...)以及响应状态代码的架构风格,它主要针对Web资源。
它使用URI来定位本地或远程资源,其中运行服务的后端服务器(例如,JAX-RS服务)正在侦听某些路径段,并将处理超过某个base-url的任何内容。 F.e服务可能正在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) {
...
}
}
在上面的示例中,如果JSON提供程序可用(org.json或jackson f.e),则调用上面的URL将尝试以JSON格式返回响应。如果通过HTTP POST操作调用http://company.com/rest/products
并发送服务器可以理解的格式的XML文档,则在请求正文中,您可以动态地向服务添加新产品。
HTML可能只是Web服务器/服务返回的众多文档格式之一。您实际从服务器收到的内容主要取决于服务器端。您可以设置某些客户端标题,告诉服务器您希望接收哪种文档 - 但服务器不会被强制接受这些标题。
虽然HTML在某种意义上可能意味着它主要针对人类,但RESTful服务的目标是没有人,只是为传入的请求服务 - 如果它们是针对人类或其他计算机的,那么只要他们不关心能够理解请求,并有一个内容处理程序可用于将对象转换为响应。
答案 2 :(得分:1)
如今,REST通常被简化为通过HTTP将数据传输为JSON(或有时是XML)的服务。这并不意味着您的网页不安宁。
让我们只看一下RESTful架构Uniform Interface constraint的两点:
资源识别:资源(通常)由URI标识,并且它们独立于其表示。因此,如果您使用JSON或XML作为表示形式,/customers/4711
是一个且相同的资源独立。客户端可以发送包含一个或多个MediaType的Accept
标头,并且通过内容协商,服务器可以找到最适合的格式。
因此,将您的数据也作为HTML提供是非常安静的,因为这是浏览器默认使用的MediaType。说使用标准格式的网络并不是一件容易的事情是没有任何意义的。 (提示:当罗伊菲尔丁撰写关于REST JSON的his Ph.D并未发明时)。
超媒体作为应用程序状态的引擎:这个想法是客户端只知道应用程序的入口点。响应包含客户端如何继续的所有信息。根据客户端的选择,服务器可以为下一步提供所有信息,依此类推。这是网页从一开始就通过简单地使用超链接做得非常好的事情。今天许多“RESTful服务”仍然缺乏这一重要功能。 网页如何遵循这一原则的另一个例子是html表格:(取自“REST: I don't Think it Means What You Think it Does” - Stefan Tilkov / GOTO Amsterdam 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?