遵循HATEOAS原则,每个州应该被超链接,建模链接改变资源状态的最佳方法是什么?
让我们用订单的经典例子:
{
id : 12,
state: 'pending',
...,
links: [
...,
{
rel: 'cancel',
href: '/orders/12/cancel'
},
...
]
}
Run Code Online (Sandbox Code Playgroud)
我对这个"/取消"部分并不满意- 如果我能发送带有内容的" PUT "请求,我会感觉好多了:
{
status:'cancelled'
}
Run Code Online (Sandbox Code Playgroud)
但是如何用链接部分中的"href"属性来表示?我想在那里代表可用的行动,例如,取消订单并不总是可能的("完成"状态).
一种可能性是使用像'/ orders/12?action = cancel'这样的URL,它有点像RPC方法,我错过了一些东西.
看起来可能最好的另一种可能性就是拥有这样的链接:
{
rel: 'cancel',
href: '/orders/12/',
type: 'PUT',
values: {
state: 'cancelled'
}
}
Run Code Online (Sandbox Code Playgroud)
这个解决方案可能感觉有点冗长.
任何想法如何优雅地处理?也许有人已经解决了类似的"问题"?
我有这样的xml:
<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
<property name="converters">
<list>
<bean class="converters.AddressToStringConverter" />
<bean class="converters.StringToAddressConverter" />
</list>
</property>
</bean>
Run Code Online (Sandbox Code Playgroud)
它可以毫无问题地配置转换器.
但是这段代码无法做到:
@Configuration
public class ConversionConfiguration {
@Bean
public ConversionService getConversionService() {
ConversionServiceFactoryBean bean = new ConversionServiceFactoryBean();
bean.setConverters(getConverters());
bean.afterPropertiesSet();
ConversionService object = bean.getObject();
return object;
}
private Set<Converter> getConverters() {
Set<Converter> converters = new HashSet<Converter>();
converters.add(new AddressToStringConverter());
converters.add(new StringToAddressConverter());
return converters;
}
}
Run Code Online (Sandbox Code Playgroud)
这个配置由上下文扫描 - 我用调试器检查它.哪里可能是问题?
我很好奇这样的事情......有没有一种编程语言可以: