【发布时间】:2012-10-09 10:19:52
【问题描述】:
我正在实现一个 REST API,在其中添加资源时,某些 POST 字段只能具有特定值。例如,我有一个带有 usertype 字段的用户资源:这个 usertype 字段只能有 2 个值,即管理员和用户。
您如何让开发人员以 RESTful 方式发现这些允许的值?
谢谢!
【问题讨论】:
我正在实现一个 REST API,在其中添加资源时,某些 POST 字段只能具有特定值。例如,我有一个带有 usertype 字段的用户资源:这个 usertype 字段只能有 2 个值,即管理员和用户。
您如何让开发人员以 RESTful 方式发现这些允许的值?
谢谢!
【问题讨论】:
您需要在您的媒体类型中定义枚举的概念。然后,您可以在超媒体控件中枚举允许的值,告诉他们在哪里发布什么。例如 GETting /users 可能会返回以下内容:
<users href="/users">
... collection information and other controls you want to include ...
<create href="/users" method="post">
... fields ...
<usertype type="enum" cardinality="required">
<administrator/>
<user/>
</usertype>
</create>
</users>
create 元素是表单,usertype 元素是表单字段,administrator 和 user 是枚举的有效值。根据此示例,您的媒体类型中将需要集合、表单、表单字段和枚举的结构。
这实际上是我喜欢 REST 的原因之一。由于此信息是在带内通信的,因此您可以轻松更改它而不会破坏(编写良好的)客户端。例如,只是说您想将editor 添加到枚举中,您可以添加它。老客户可以忽略它,新客户可以利用它。更好的是,您可以根据请求者的授权更改有效值。例如如果请求者是管理员,那么他们将被赋予 administrator 和 user 作为有效值。如果请求者是user,那么他们只会被给予user 作为有效选项。太好了!
【讨论】:
一个简单的解决方案可能是一个只读资源/usertypes,它返回允许的值。
【讨论】: