Предположим, что у меня есть RESTful API для управления заказами, которая использует HAL для облегчения HATEOAS:Создание клиентской библиотеки 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
? Под этим я подразумеваю аналогично тому, что предлагается с C#/веб-сервисами, которые экспортируют WSDL.
Я думал о реализации OPTIONS
для таких ресурсов, как /orders
и /orders/{id}
, так что я бы эффективно иметь API HATEOAS для обхода схемы в 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). Тем не менее, я все равно хотел бы написать свое приложение, используя набор концептуальных интерфейсов/контрактов.
Поскольку вы используете JavaScript, знаете ли вы/считаете ли вы фундамент чего-то типа hyperagent.js? http://weluse.github.io/hyperagent/ –
Спасибо, я проверю. Не могли бы вы прислать мне несколько советов о том, почему HAL хорош для использования? – inf3rno