Java 设计一个RESTful网站

Java 设计一个RESTful网站,java,http,rest,restful-url,restful-architecture,Java,Http,Rest,Restful Url,Restful Architecture,我正在努力学习创建RESTful web应用程序。我有一些疑问 比如说,我需要在网站标题上显示用户名。我以前是通过在会话中存储用户对象,然后在JSP中获取名称来实现的。但现在,这不是存储了一个会话数据并打破了REST惯例吗?只要用户登录,我是否必须在每次响应中向客户端发送名称(过度杀戮) 我在许多网站上看到过URL,包括模式questions/4135336/correct rest-uri设计中的URL。假设ID是4135336,那么questions/4135336就足够了吗?那之后是什么呢

我正在努力学习创建RESTful web应用程序。我有一些疑问

  • 比如说,我需要在网站标题上显示用户名。我以前是通过在会话中存储用户对象,然后在JSP中获取名称来实现的。但现在,这不是存储了一个会话数据并打破了REST惯例吗?只要用户登录,我是否必须在每次响应中向客户端发送名称(过度杀戮)
  • 我在许多网站上看到过URL,包括模式
    questions/4135336/correct rest-uri设计中的URL。假设ID是
    4135336
    ,那么
    questions/4135336
    就足够了吗?那之后是什么呢?另一个身份证?有什么标准来生成它吗
  • 我已经读到,对于一个特定的资源,比如说/students/{student}CRUD操作应该使用GET(fetch)、POST(update)、PUT(create/overwrite)、DELETE(DELETE)来完成。如果它是由人读取的应用程序,那么我们需要这些约定吗。例如:一篇文章不会通过发送适当的参数来进行删除吗?我们想要实现什么

  • 提前感谢:)

    作为对第3条的回应:经验法则说,你应该用GET呈现数据,用POST操作数据。这样的创建和删除不需要是POST以外的任何内容


    千万不要使用GET-Through操作数据,否则您的链接(
    somesite.com/users/delete?user=1
    )可能会被编入索引,并且您的整个数据库将变得一团糟。使用GET显示数据还允许用户将特定结果添加到书签中,并提供一个链接发送给其他人。

    作为对第3条的回应:经验法则说,您应该使用GET显示数据,使用POST操作数据。这样的创建和删除不需要是POST以外的任何内容

    千万不要使用GET-Through操作数据,否则您的链接(
    somesite.com/users/delete?user=1
    )可能会被编入索引,并且您的整个数据库将变得一团糟。使用GET表示数据还允许用户将特定结果添加到书签中,并提供一个链接发送给其他人。

    背后的整个思想是,从服务器的角度来看,每个请求都是完全独立的。客户负责维护状态(如有)。对于给定的请求,服务器向客户机传输满足该请求所需的信息,并且还可以传输允许客户机通过发出更多请求来查找附加信息的信息。考虑到这一点:

  • 这取决于网站的设计,以及什么是“资源”。如果客户端请求一个页面,并且该页面被视为单个资源单元,那么是的,服务器需要返回用户名作为任何请求响应的一部分。如果设计是这样的,那么客户机就有责任在请求中请求用户名,然后在标题中呈现用户名。页面其余部分的内容将通过其他单独的请求呈现
  • ID足够了。URL的其余部分只是为了便于人类阅读,因为人类不容易记住“415336”是标题为“正确的RESTURI设计”的文章的ID。服务器不使用URL中的额外信息来查找项目;仅使用ID。因此,它本身并不是REST的一部分,它只是站点提供的一个细节
  • REST在理想情况下应该是客户不可知论的;理论上,您可以编写一个通用的REST客户机,它可以导航任何支持REST的服务器,并且该客户机能够发现服务器上有哪些资源,并能够对它们进行操作。这是可能的,因为正如您所指出的,REST利用HTTP动词的标准词汇表来表示常见的CRUD操作。如果您重载HTTP谓词以表示其他内容,则通用客户端可能无法导航该站点。此外,如果你有副作用,比如更新或删除信息,那么一个普通的客户端(比如一个网络爬虫)可能仅仅通过试图找出站点上有什么可用的信息来破坏信息。这绝不是一个好主意
  • 从服务器的角度来看,每个请求都是完全独立的。客户负责维护状态(如有)。对于给定的请求,服务器向客户机传输满足该请求所需的信息,并且还可以传输允许客户机通过发出更多请求来查找附加信息的信息。考虑到这一点:

  • 这取决于网站的设计,以及什么是“资源”。如果客户端请求一个页面,并且该页面被视为单个资源单元,那么是的,服务器需要返回用户名作为任何请求响应的一部分。如果设计是这样的,那么客户机就有责任在请求中请求用户名,然后在标题中呈现用户名。页面其余部分的内容将通过其他单独的请求呈现
  • ID足够了。URL的其余部分只是为了便于人类阅读,因为人类不容易记住“415336”是标题为“正确的RESTURI设计”的文章的ID。服务器不使用URL中的额外信息来查找项目;仅使用ID。因此,它本身并不是REST的一部分,它只是站点提供的一个细节
  • REST在理想情况下应该是客户不可知论的;理论上,您可以编写一个通用的REST客户机,它可以导航任何支持REST的服务器,并且该客户机能够发现服务器上有哪些资源,并能够对它们进行操作。这是可能的,因为REST利用了标准voca