为什么https方法放置和删除

时间:2018-09-24 05:27:46

标签: rest spring-mvc spring-boot restlet

我不是REST体系结构方面的专家,我正在阅读教程。我对理解http方法的作用感到困惑。我了解的是,根据教程,有四种HTTP方法GET,POST,PUT,DELETE,它可以完成以下工作。

GET->只读操作 POST->创建资源 PUT->更新资源 DELETE->删除资源

我对这里的疑问是,我可以编写一个通过注释@POST而不是@DELETE删除资源的代码吗? 我没有在应用程序中使用@PUT和@DELETE,而是仅使用@POST来执行此操作? 使用@PUT和@DELETE是否真的必须执行?如果我不使用它会有什么后果?

@POST
@Path("/{empNo}")
@Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
public void deleteEmployee(@PathParam("empNo") String empNo) {
    EmployeeDAO.deleteEmployee(empNo);
}

3 个答案:

答案 0 :(得分:0)

在Roy Fielding关于REST的论文中,他只提到了统一接口

以便您可以根据需要定义统一界面。

POST->删除资源没问题

POST->更新资源正常。

但是,如果您想使自己的api更清晰并遵循HTTP标准。

-POST->创建新对象

-PUT->更新对象

-DELETE->删除对象

答案 1 :(得分:0)

@GET : to get information
@POST : to save information
@PUT : to update Information
@DELETE : to delete information 

上面的描述只是一个全球通用的约定。

以您的示例

理想情况下应该是

@DELETE
@Path("/{empNo}")
@Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
public void deleteEmployee(@PathParam("empNo") String empNo) {
    EmployeeDAO.deleteEmployee(empNo);
}

但这也是完全有效的

@POST
@Path("/{empNo}")
@Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
public void deleteEmployee(@PathParam("empNo") String empNo) {
    EmployeeDAO.deleteEmployee(empNo);
}

唯一的收获是其不可预测 API。开始时可能会造成混淆。

让我们说一个新人需要处理Delete Employee。

他要做的第一件事是寻找@DELETE

答案 2 :(得分:0)

我们可以使用任何方法来完成任何工作。

这意味着

@GET
can create new element, can get any element, can update and also delete


@POST
can create new element, can get any element, can update and also delete


@PUT
can create new element, can get any element, can update and also delete


@DELETE
can create new element, can get any element, can update and also delete

这些方法通常定义如何根据请求发送数据以及可以发送的数据限制

@GET
only query string, which is browser URL with ?key1=value1&key2=value2...., Most webservers have a limit of 8192 bytes (8KB)

@POST
can send query string data(not preferred), data is sent in the request payload instead of in the URI. Default to 2MB. 

@PUT
same as POST

@DELETE
same as GET

如果查看GmailFacebook LinkedIn个其他站点,它们都使用POST方法来获取新邮件,消息,更新,通知和其他内容...

使用REST命名约定是为了帮助用户和新开发人员了解API的功能。

在阅读GET时,它将帮助用户知道API将会做什么。对于POSTPUTDELETE同样。为了易于理解REST,请定义要遵循的某些准则。没必要,很好。