Ответ 1
Как сказал сампада, оба - чванство и HATEOAS - добавляют большую ценность для разных измерений вашего api.
Swagger добавит ценность жизненному циклу разработки, делая ваш api более понятным и доступным для просмотра во время разработки.
HATEOAS добавит ценность вашему api при использовании клиентами. Ссылки, предоставляемые HATEOAS, дают вам возможность связывать разные части (то есть ресурсы) вашего api, не требуя жесткого кодирования этих ссылок в коде клиента вашего приложения.
Предполагая, что у вас есть контракт с несколькими документами, связанными с ним. Одним из наиболее распространенных способов моделирования этого было бы использование двух ресурсов:
- Контрактный ресурс - с учетом операций по перечню, добавлению, удалению, изменению контрактов;
- Документ Ресурс - если вы выполняете операции по перечислению, добавлению, удалению, изменению документов
Чтобы связать эти два вместе, вы можете добавлять поля в обе модели ресурсов, содержащие массивы соответствующего ресурса. Кроме того, вы должны реализовать эти неявные знания в своем клиентском приложении. Таким образом, вы будете добавлять беспорядок в свои представления ресурсов с течением времени, загрязняя его информацией об отношениях с другими объектами.
Именно здесь вступает в игру HATEOAS, как перемещая эту информацию об операциях из ваших бизнес-объектов, так и предоставляя единый способ справиться с этими отношениями. Оба бизнес-объекта ресурсов теперь будут включать один стандартизованный заголовок или значение-поле, содержащее информацию обо всех отношениях текущего ресурса. Например, у одного ресурса контракта теперь будет 3 ссылки с rel-attribute "document", связывающие с соответствующими ресурсами документа и 1 ссылку с rel-attribute "order", связывающую с порядком, в результате которого был заключен этот контракт.
Насколько я знаю, JSON-LD используется для нормализации словаря различных API, что упрощает их использование бок о бок. Некоторые могут использовать firstName & lastName как свойство объектов Person, в то время как другие будут иметь имя properties givenName & familyName. С JSON-LD вы можете сопоставить оба объекта с общим именем. Вы можете рассмотреть возможность взглянуть на эту ссылку: DZone - Json-LD