Я занимаюсь разработкой REST api и получаю как RESTful. Я хочу включить HATEOAS в ответы json.
Добавление URL-адресов в связанные ресурсы достаточно просто, но было некоторое обсуждение структуры, используемой для этих ссылок.
Несколько статей, которые я нашел, используют структуру, заимствованную из ATOM feeds:
"links": [
{"rel": "self", "href":"http://example.org/entity/1"},
{"rel": "friends", "href":"http://example.org/entity/1/friends"}, ...
]
Это вызвало ряд вопросов:
-
Зачем использовать массив в качестве контейнера?. По словам разработчика javascript, которого я знаю, доступ к ссылкам будет проще с помощью ссылок как свойств объекта. Например:
"self": { "href":"http://example.org/entity/1" }, /* (facebook uses this) */ "friends": { "href":"http://example.org/entity/1/friends", "type": "..."}
-
Существует ли общая структура json (помимо адаптации атома снова) для описания ссылок в свойствах ресурса? (например, отправитель сообщения).
Ссылка, вероятно, должна быть снова решена как URL-адрес, но было бы неплохо включить простой идентификатор? вроде как:
"sender": { "id": 12345, "href": "resource-uri" }
Мой образ мыслей заключается в том, что, хотя HATEOAS делает это так, что клиенту не нужно много знаний для использования API, я вроде бы неохотно удаляю возможность использовать эти знания (например, получить доступ к профилю создавая ссылку на стороне клиента, не глядя сначала на пользователя).