Я начал читать об использовании HATEOAS для приложения и подумал, что было бы неплохо использовать структурированный HTML для данных, а не использовать, например, json.
Пример ниже:
{
"name": "Alice",
"avatar": "data:image/gif;base64,R0lGODlhEAAQAMQAAORHHOVSKudfOulrSOp3WOyDZu6QdvCchPGolfO0o/XBs/fNwfjZ0frl3/zy7////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAkAABAALAAAAAAQABAAAAVVICSOZGlCQAosJ6mu7fiyZeKqNKToQGDsM8hBADgUXoGAiqhSvp5QAnQKGIgUhwFUYLCVDFCrKUE1lBavAViFIDlTImbKC5Gm2hB0SlBCBMQiB0UjIQA7"
"links": [ {
"rel": "self",
"href": "http://localhost:8080/customer/1"
},
{
"rel": "up",
"href": "http://localhost:8080/customer"
},
{
"rel": "orders",
"href": "http://localhost:8080/customer/1/order"
}
]
}
может быть переписано в HTML как:
<html><head>
<script type="text/javascript" src="/site-wide-script.js"></script>
<script type="text/javascript" src="script.js"></script>
<link rel="stylesheet" href="/site-wide-styles.css">
<link rel="stylesheet" href="styles.css">
</head>
<body data-type="customer">
<div data-attribute="name">Alice</div>
<div data-attribute="avatar"><img src="data:image/gif;base64,R0lGODlhEAAQAMQAAORHHOVSKudfOulrSOp3WOyDZu6QdvCchPGolfO0o/XBs/fNwfjZ0frl3/zy7////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAkAABAALAAAAAAQABAAAAVVICSOZGlCQAosJ6mu7fiyZeKqNKToQGDsM8hBADgUXoGAiqhSvp5QAnQKGIgUhwFUYLCVDFCrKUE1lBavAViFIDlTImbKC5Gm2hB0SlBCBMQiB0UjIQA7" alt="avatar"></div>
<nav>
<ul>
<a href="http://localhost:8080/customer/1" rel="self">Info</a>
<a href="http://localhost:8080/customer" rel="up">Customers</a>
<a href="http://localhost:8080/customer/1/order" rel="customers">Orders</a>
</ul>
<ul>
<form method="put">
<label>Name<input type="text" name="name"></label>
<label>Avatar<input type="file" name="avatar" accept="image/gif, image/jpeg"></label>
<input type="submit" value="Edit">
</form>
</ul>
<ul>
<form method="delete">
<input type="submit" value="Delete">
</form>
</ul>
</nav>
</body></html>
Вышеприведенное будет представлять «клиента» вместе со всеми действиями, которые могут быть предприняты с этой сущностью, с дополнительным преимуществом указания того, как эти действия должны выполняться.
Моя идея состоит в том, чтобы создать очень прогрессивное веб-приложение, которое всегда предоставляет пользователю его возможности и которое в основном использует одни и те же site-wide-script.js
и site-wide-stylesheet.css
, чтобы изменять согласованное отображение вещей во всех представлениях пользовательского интерфейса. , Другой сценарий и таблица стилей могут потенциально использоваться для выполнения чего-то очень специфичного для сущности (например, более продвинутая проверка в некоторых случаях или динамическое добавление дочерних сущностей в тот же пользовательский интерфейс).
По сути, это использует пользовательский интерфейс в качестве носителя данных и может сделать создание мобильного приложения более громоздким ...
Существуют ли какие-либо аргументы против представления данных таким образом при выполнении HATEOAS, кроме очевидной разницы в размерах ответов?
- Является ли оно недействительным согласно некоторым RFC?
- Испытывался ли это где-то еще и не получилось (кажется, что большинство ресурсов HATEOAS используют примеры с json или xml)?
- Есть ли данные, которые не могут быть представлены таким образом в хорошем смысле?