Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在基于HATEOAS的REST api中处理只写资源_Rest_Hateoas - Fatal编程技术网

在基于HATEOAS的REST api中处理只写资源

在基于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",

假设我有一个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",
      "href": "https://localhost:8080/api/user/xy/password"
  }]
}
如您所见,api提供了一个资源的引用(在_links部分),客户机可以在其中更改密码。现在,我希望客户端在向该引用发送PUT请求时更新密码

现在我的问题是:

  • 在基于HATEOAS的RESTAPI中实现“更改密码”这样的用例,这是一种好的/正确的方法吗?还是有其他/更好的方法
  • 成功更改密码后,服务器应返回什么?我可能会期望状态204和一个空的身体
  • 当然,我不想向用户显示其当前密码。因此,如果客户端试图获取密码资源,我的服务器将返回代码405。RESTAPI中的“只写”资源通常有效吗
  • 。。。在基于HATEOAS的RESTAPI中

    首先,REST所暗示的为数不多的约束之一是HATEOAS已经就位,因此HTTP客户机使用链接来推进其当前状态。不使用HATEOAS的客户端不是REST客户端,不包含提供clinet新状态可能性的链接的API也不是RESTful API

    关于你的实际问题,它总是取决于你对某些事物的建模方式。您可以使用
    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
    错误响应,尽管这可能取决于语言和框架

    感谢您的详细回复!密码示例更多的是关于一个学术示例-尝试为只读资源想出一个简单的示例。