在基于HATEOAS的REST api中处理只写资源
假设我有一个REST资源供我的用户使用。如果客户端使用GET请求一个特定用户,那么api将返回以下json 获取在基于HATEOAS的REST api中处理只写资源,rest,hateoas,Rest,Hateoas,假设我有一个REST资源供我的用户使用。如果客户端使用GET请求一个特定用户,那么api将返回以下json 获取https://localhost:8080/api/user/xy { "name": "John Smith", ... "_links": [{ "rel": "self", "href": "https://localhost:8080/api/user/xy" }, { "rel": "changepassword",
https://localhost:8080/api/user/xy
{
"name": "John Smith",
...
"_links": [{
"rel": "self",
"href": "https://localhost:8080/api/user/xy"
},
{
"rel": "changepassword",
"href": "https://localhost:8080/api/user/xy/password"
}]
}
如您所见,api提供了一个资源的引用(在_links部分),客户机可以在其中更改密码。现在,我希望客户端在向该引用发送PUT请求时更新密码
现在我的问题是:
PUT
更新该字段,然后返回204 No Content
响应以指示该字段没有可读内容。根据
如果目标
资源确实具有当前表示形式,并且该表示形式
根据所附文件的状态成功修改
表示,则源服务器必须发送200(确定)或
204(无内容)响应,表示成功完成了
请求
返回204没有符合条件的内容
状态代码
另一种方法可以将旧密码发送给服务,以便服务首先根据提供的旧密码检查当前密码,然后才更新密码。这可以防止在您不使用加密连接的情况下试图更改其他用户密码的攻击。但是,为了完成此验证检查,客户端无法再使用简单的PUT
操作,除非将旧密码设置为新状态的一部分。这里的POST
可能更合适,因为它将语义留给API的实现者。这甚至可以维护最近n个密码的历史记录,新密码可能不是以前的任何密码
HTTP提供了客户端可以用来确定哪些操作适合某些端点的方法。Zac Stewart解释了OPTIONS
方法对于a中RESTful API的有用性,并指出了当前HTTP服务器在使用OPTIONS
方面存在的许多缺点
大多数HTTP框架都会返回一个
405方法Not Allowed
响应代码,以防使用默认情况下没有实现的操作调用端点。至少在Java中,在SpringMVC/Rest数据中或在JAX-RS中,在某些端点提供的方法必须使用对应于HTTP方法的接口进行注释。使用现在具有等效注释方法的操作调用端点将自动生成405
错误响应,尽管这可能取决于语言和框架 感谢您的详细回复!密码示例更多的是关于一个学术示例-尝试为只读资源想出一个简单的示例。