繁体   English   中英

JAX-RS中方法类型的最佳实践

[英]Best practices for method types in JAX-RS

有关JAX-RS中方法类型的最佳实践是什么?

我对以下方法感兴趣:GET,POST,PUT和DELETE。

我可能的方法:

GET - 总是返回一个回复。

@GET
@Path("/path/{something}")
public T getT() {
    ...
    return t;          // t - instance of T
}

POST

@POST
@Path("/path")
public T/void createOrUpdate() {
    ...
    return t;          // t - instance of T
}

问:返回整个创建的资源或仅返回“ACK响应”还是使用void方法更好? 那个用作GET的POST(当我们想避免URL长度限制时)?

@PUT
@Path("/path")
public T/void createOrUpdate() {
    ...
    return t;          // t - instance of T
}

问:是不是最好有一个方法或创建/更新的资源或不同的反应创造/更新或只是一个ACK响应响应

删除

@DELETE
@Path("/path/{something}")
public T/void deleteT() {
    ...
    return t;          // t - instance of T
}

问:最好是使用void方法还是返回已删除的资源或返回ACK响应

总是有T = javax.ws.rs.core.Response (当使用T时)可以吗?

我看见了:

  • Lars Vogel使用GET - T,POST - void,PUT - T,DELETE - void
  • Oracle使用GET - T,POST - T / void,DELETE - void

JAX-RS是使用Java开发RESTful Web服务的规范。 Java EE中包含一个参考实现,但由于它是一个规范,因此可以编写其他框架来实现规范,包括Jersey,Resteasy等。

这样的JAX-RS没有为REST API的返回类型和响应代码制定任何指导原则。 但是,REST标准中有一些指导原则(这些不是硬性规则和快速规则),您可能需要遵循这些指南:

Method                  GET     
Successful Response     RETURN the resource with 200 OK  
Failure Response        RETURN appropriate response code

Method                  POST  
Successful Response     RETURN the link to the newly created resource in Location response  header with 201 status code  
Failure Response        RETURN appropriate response code

Method                  PUT  
Successful Response     RETURN the updated resource representation with 200 OK or return nothing with 204 status code   
Failure Response        RETURN appropriate response code

Method                  DELETE  
Successful Response     RETURN nothing with 200 or 204 status code  
Failure Response        RETURN appropriate response code

实际上,POST适用于创建资源。 应在Location响应头中返回新创建的资源的URL。 PUT应该用于完全更新资源。 请理解这些是设计RESTful API时的最佳实践。 这样的HTTP规范不限制使用PUT / POST,但有一些限制来创建/更新资源。 看一下Twitter REST API最佳实践 ,总结了RESTful API的最佳实践。

这个答案不正确/最新。 请检查@ROMANIA_engineer答案。

你永远不应该回归虚空。 最佳做法是始终返回javax.ws.rs.core.Response 但请注意,即使您使用void定义webresource,您的服务器也会返回HTTP响应。

POSTPUT ,最好返回修改后的资源,包括其id。 一些前端框架和/或中间件将使用它来将资源与您的服务器同步(例如,参见Backbone Model )。

DELETE ,它取决于您尝试实现的操作。但通常ACK就足够了。

注意:无论如何,无论您返回什么,都不要忘记尊重您的安全政策!


响应@Atul:当您从客户端发送HTTP请求或从服务器发送HTTP响应时,某些数据可能会受到保护。 作为实例:

  • 在用户更新(用户名,密码或其他任何内容)上,不要在HTTP响应中返回用户密码。
  • 用户登录时,最好使用HTTPS协议,不要以明文形式发送密码
  • 等等

我试一试并说“没有最好的做法”。 这是因为底层协议(HTTP)实际上在任何情况下都有返回值(例如200-OK,500-Internal Error ...),除非您的服务也应该遵循断开的连接。

由于您没有按照自己的规则实施HTTP协议,而是自己设计的服务,没有最佳做法,您必须以最适合您日常业务的方式定义“您的协议”。

例如,当涉及到删除操作时,调用者可能根本不对响应感兴趣,或者期望您像堆栈一样工作并在调用时返回“删除/删除”元素。 由您自己决定最适合您的需求。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM