首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HAL中的链接

HAL中的链接
EN

Stack Overflow用户
提问于 2017-11-24 12:10:27
回答 1查看 4.8K关注 0票数 3

如何描述HAL中的帖子链接?

我正在设计一个带有RESTful约束的HAL,类似于维基百科的HATEOAS示例,但使用HAL表示(为了清楚起见,删除方案、主机等):

代码语言:javascript
复制
GET /accounts/12345

{
  "id" : 12345,
  "balance" : 100.00
  "_links" : {
    "self" : {
      "href" : "/accounts/12345"
    },
    "transfer" : {
      "href" : "/accounts/12345/transfer{?amount,target}",
      "templated" : true
    }
  }
}

为了执行“转移”操作,客户可能会:

代码语言:javascript
复制
GET /accounts/12345/transfer?amount=100.00,target=54321

{
  "id" : 34567,
  "amount" : 100.00
  "_links" : {
    "self" : {
      "href" : "/transfers/34567"
    },
    "source" : {
      "href" : "/account/12345"
    },
    "target" : {
      "href" : "/account/54321"
    }
  }
}

通过GET调用"transfer“链接会在”transfer“中创建一个新的重新源。但是做一个GET来创建一个新资源并不是幂等的,它“感觉”错误;以RESTful资源为中心的API会发布:

代码语言:javascript
复制
POST {amount: 10.00, source: 12345, target: 54321}  /transfers/

{
  "id" : 34567,
  "amount" : 100.00
  "_links" : {
    "self" : {
      "href" : "/transfers/34567"
    },
    "source" : {
      "href" : "/account/12345"
    },
    "target" : {
      "href" : "/account/54321"
    }
  }
}

但是,我如何在HAL中描述这个帖子和必需的表单元素,这样客户端就可以只做“正确的事情”而不需要硬编码?也许是这样的:

代码语言:javascript
复制
{
  "id" : 12345,
  "balance" : 100.00
  "_links" : {
    "self" : {
      "href" : "/accounts/12345"
    },
    "transfer" : {
      "href" : "/transfers{?amount,source,target}",
      "templated" : true,
      "method" : "POST"
    }
  }
}

但是method不是HAL规格的一部分,也没有类似的标识符--所以感觉我走错了路.

也许我的客户应该“知道”transfer的GET返回匹配的传输资源,transfer的POST创建了一个新的传输资源。

FWIW,我的实现是在Spring中使用Spring 2,所以接下来的问题是如何用Spring来表达这一点.

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-24 12:58:02

你不能用HAL这么做。Mike,HAL,GitHub上的状态的创建者

这样做的"HAL方式“是使用链接rel文档以人类可读的形式传递可用的方法。即。您的树皮示例如下所示(请注意," barks“链接rel现在是一个URL) { "_links":{ "http://docs.example.com/barks":{ "href":“/v1/狗/1/吠”} 如果开发人员在浏览器中获取URL http://docs.example.com/barks,文档可以指定可用的方法、有效的请求主体、潜在的响应代码、响应体等。然后,开发人员会将其编码到她正在构建的客户机中。

这是HAL规范imho的一个主要缺陷,但是还有其他解决这个问题的中介类型,比如梅森或HAL扩展哈尔式。虽然我不确定它们是如何与Spring集成的,但可能值得检查一下。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47473040

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档