Я прочитал много обсуждений здесь, на SO, просмотрел Jon Moore's presentation (что объясняло много, кстати) и прочитало сообщение блога Роя Филдинга на HATEOAS, но я все еще чувствую себя немного в неведении, когда дело касается клиента дизайн.Дизайн клиента HATEOAS
API Вопрос
На данный момент, я просто возвращался с формами XHTML/якорей и списки определений для представления ресурсов. Следующий фрагмент детализирует, как я выкладываю формы/анкеры/списки.
# anchors
<li class='docs_url/#resourcename'>
<a rel='self' href='resource location'></a>
</li>
# forms
<form action='action_url' method='whatever_method' class='???'></form>
# lists
<dl class='docs_url/#resourcename'>
<dt>property</dt>
<dd>value</dd>
</dl>
Мой вопрос в основном относится к формам. В разговоре Джона он документирует такие типы, как (add_location_form) и т. Д., И необходимые для них данные. У меня не так много ресурсов, но я думал об абстрактных типах форм (добавлении, удалении, обновлении и т. Д.) И просто запомните в документации, которая для (добавить, обновить), что вы должны отправить действительное представление целевого ресурса и с удалением необходимо отправить идентификатор.
Вопрос 1: С понятием HATEOAS, мы не должны на самом деле просто сделать клиент «открыть» форму (с помощью причислять их добавления, удаления, обновления и т.д.) и просто отправить обратно все данные, дал им? Мой реальный вопрос здесь (не должен быть дискуссией) заключается в том, что это следует за хорошей практикой?
Клиент Вопрос
После HATEOAS, с нашими действиями по ресурсам, которые обнаруживают, в состоянии, как делает этот эффект код клиента (потребители АФИ) и их пользовательский интерфейс. Звучит здорово, что после этих принципов пользовательский интерфейс должен показывать только действия, доступные, но как это реализовано?
Мой текущий подход анализирует ответ как xml и usin xpath для поиска действий, известных во время разработки клиента (задокументированные классы форм, т.е. добавления, удаления, обновления) и отображения элементов управления ui, если они доступный.
Вопрос 2: Я ошибаюсь в своем способе обнаружения? Или это слишком много магии, насколько это касается клиента (зная классы форм)? Разве это не предполагало бы, что клиент знает, какие действия доступны для каждого ресурса (что может быть хорошо, потому что это своего рода причина для создания клиента, правильно?) И должно быть документировано сопоставление действий (классов форм) с ресурсами , или просто документировать классы форм и позволить клиенту (и разработчику клиента) исследовать и обнаруживать их?
Я знаю, что я везде с этим, но любое понимание очень ценится. Я отмечу ответ, отвечающий на любой из этих двух вопросов. Благодаря!
Отлично! Таким образом, документируя различные «классы» форм (crud) и подвергая их, когда они доступны в соответствии с доменом и позволяют клиентам искать «известные» формы, представляется приемлемым подходом, если они используют форму вместо того, чтобы предполагать ее , Отлично. К счастью, на данный момент я создаю и клиент, и api. – jowee
Создает объекты внутри клиентского кода, которые соответствуют хорошей практике сервера? Я бы предположил так, так как это позволило бы клиенту «заполнить» поля форм, которые они понимают легче. Или это слишком большая репликация (т. Е. DRY). Думаю, в этом смысле это было бы прекрасно, поскольку я действительно говорю о двух совершенно разных приложениях (api, client), поэтому DRY не будет применяться. – jowee
Да, трюк записывает то, что сервер действительно спрашивает и говорит вам делать, а не то, что вы думаете, на момент написания, сервер хочет сделать. Чем больше вы предполагаете, тем более хрупкой система и более устойчивой к ее изменению становится. Но гибкость связана со стоимостью кодирования и сложностью кода, поэтому большинство людей не беспокоят. –