假设我有一个 RESTful API 用于管理使用HAL来促进 HATEOAS 的订单:
GET /orders/2
{
"_links": {
"self": "/orders/2",
"items": "/orders/2/items"
},
"subtotal": 30.0,
"shipped": false
}
我想使用一组接口来编写我的客户端(应用程序),这样,假设这些接口的实现是 DI-d/由 DI-d 工厂等构建的,我真的(想要)不必关心他们得到了我的 RESTful API 的支持。例如(伪 C#/Java):
public interface Order {
public void addItem(Item item);
public float getSubtotal();
public boolean getShipped();
}
Order order = ...;
Item item = ...;
order.addItem(item);
...(order.getSubtotal())...;
我的问题是:我/从 API生成Order
/接口的实现是否有意义?Item
我的意思是与导出 WSDL 的 C#/web 服务提供的方式类似。
我一直在考虑实现OPTIONS
诸如/orders
和之类的资源,/orders/{id}
这样我就可以有效地拥有一个 HATEOAS API 来遍历 API 的模式:
GET /orders/* (I'd need a suitable wildcard of course)
{
"_links": {
"addItem": {
"href": "/orders/{id}/items",
"templated": true,
"type": "method"
}
}
}
当然,我可以_links
使用任何给定的资源(/orders/2
例如)返回对象的这一部分,但这会排除静态代码生成。
我想知道是否有一种明智的方法来封装这样一个事实,即如果提供了特定链接,则相关操作应该可用/执行,否则不可用。
注意:如果重要的话,我实际上是在使用 JavaScript(特别是使用 AngularJS)。但是,我仍然想使用一组概念接口/合同来编写我的应用程序。