2

假设我有一个由 Thingy 和 Dooda 组成的 Widget 资源。Thingys 和 Doodas 有多种类型,Thingy 类型和 Dooda 类型的组合将准确确定 Widget 将具有哪些属性。虽然我知道为了创建 Widget 我应该发送资源的完整表示,但 Thingys 和 Doodas 的潜在组合很多,因此在一个 Widget 对象中发送所有可能的属性是不切实际的。

因此,为了创建一个小部件,我只需要发送由 Thingy 和 Dooda 组合定义的那些属性。向客户端传达要发送的表示的定义的最佳方式是什么?

我的第一个想法是提供一个端点,客户端可以向该端点发送 Thingy/Dooda 类型组合并接收回 Widget 的空白“模板”表示,它定义了需要哪些属性,或者是否有更好的方法来处理这种情况?

4

1 回答 1

2

这是一种方法

> GET http://acme.com/api

< 200 OK
< Content-type:  application/hal+xml

<resource>
   <!-- Home resource for acme API -->
   <link rel="create-form" href="http://acme.com/api/widgets/form{?thingyType,doodaType}"
</resource>

Hal 是这里定义的标准超媒体格式。create-form链接关系类型在RFC 6861中定义。URI 使用RFC 6570中定义的 URI 模板格式。客户端必须解析 URI 模板并遵循规则create-form来检索表单表示。

> GET /acme.com/api/widget?thingyType=foo&doodaType=bar

< 200 OK
< Content-Type:  application/xhtml

<html>
   <form method="POST"href="http://acme.com/api/widgets">
       <input type="text" name="thingyX">
       <input type="text" name="thingyY">
       <input type="text" name="doodaA">
       <input type="text" name="doodaB">
   </form>
</html>

在这个例子中,我使用了一个 html 表单。但是,没有要求使用这种类型的表格。可以使用一些其他表单类型媒体类型。

> POST http://acme.com/api/widgets
> Content-Type:  x-application/www-form-urlencoded

thingyX=20&thingyY=45&doodaA=yo&doodaB=dawg

< 201 Created
< Location: http://acme.com/api/widgets/975
 

创建小部件后,可以在您喜欢的任何表示媒体类型中检索它。

> GET  http://acme.com/api/widgets/975

< 200 OK
< Content-Type:  application/vnd.acme.widget+xml

<widget>
  <thingy X="20" Y="45">
  <dooda A="yo" B="dawg"/>
</widget>
于 2013-06-04T15:56:12.000 回答