提交具有关联标签的资源时的宁静

时间:2014-09-26 21:36:30

标签: rest

我有一个标签的概念。系统有几个标签,可以在/标签处获取。

标签由ID和名称组成。

当用户提交房屋时,他可以为其添加多个标签,因此提交的房屋的JSON可能如下:

{"house" : { "name" : "White House", "tags" : [8,10,9] } }

其中8,10,9是标签的ID。

但是,如果我让用户提供标签的名称,它会是RESTful吗?像:

{"house" : { "name" : "White House", "tags" : ['big','residential','garden'] } }

我没有看到使用文本的优点,除了它更自我解释。这是一个很好的解决方案,还是至少RESTful?

1 个答案:

答案 0 :(得分:0)

您可以使用这两种语法。您的REST客户端并不关心,它是一台机器,而不是一个人。

REST的统一接口约束是将客户端与服务实现分离。服务的实现主要包括URI结构,数据结构等......要将客户端与这些东西分离,您必须使用标准:

  • 用于标识资源的URI标准
  • HTTP标准,用于定义方法以操纵资源,
  • 标准MIME类型,用于描述每封邮件的序列化格式,
  • 用于描述可用操作并将客户端与URI结构分离的链接,
  • 为链接添加语义的标准词汇(例如链接关系)
  • 为数据结构添加语义的标准词汇(例如RDF词汇)

在您提交房屋的情况下,您可以将其描述为响应中的链接。因此,通过处理该资源,您的客户端将能够生成表单。您可以在链接中添加字段,例如标记。您可以为该字段添加语义和范围,例如索引或带有正确注释的名称,这样您的客户端就能够自动下载可用标记列表等...为了做到这一点,您需要一个兼容RDF的MIME类型,例如JSON-LD和可以描述链接的词汇,如Hydra。

如果您没有为第三方客户编写API,那么您可能并不需要所有这些。在这种情况下,为了实现统一的接口约束,只需定义供应商特定的MIME类型(可以包含链接),并执行您想要的操作。请注意,您的客户很容易因服务的任何变化而中断。有超媒体类型可以是一个很好的模板,例如HAL,集合+ json,shiren等......