Spring Auto REST Документы + Spring Data REST? HATEOAS?
Мне очень нравится идея использования комментариев Javadoc для автоматической генерации документов REST!
Spring Data REST автоматически генерирует огромные части нашего REST API (добавляя @RepositoryRestResource в репозитории). Было бы здорово, если бы REST Docs также могли быть сгенерированы для них - это было бы очень высокой степенью автоматизации.
Но, к сожалению, большинство "автоматических" фрагментов "пусто" (например, auto-response-fields.adoc содержит только список ссылок []- Атрибуты). Я предполагаю, что причина может заключаться в том, что контроллеры REST, вероятно, создаются динамически с помощью Spring Data REST. В настоящее время я не вижу, как повторно использовать комментарии Javadoc для них.
Есть ли способ автоматически генерировать документы REST для таких API REST, которые предоставляются Spring Data REST? Было бы даже полезно вручную указать Spring Auto REST Docs, какие классы используются в запросах и ответах, вместо того, чтобы позволить ему обнаруживать это статически - это возможно?
И мы также добавляем "_links" HATEOAS к большинству ресурсов ответа (предоставляя ResourceProcessors в качестве компонентов). Эти ссылки содержат "заголовки", которые используются Spring REST Docs - если мы перечислим их все с помощью HypermediaDocumentation.linkWithRel(...). Это немного избыточно, и было бы неплохо, если бы все ссылки с "заголовками" могли обрабатываться автоматически. (Но это можно сделать, перечислив их все в каком-то дополнительном коде, так что это не так плохо, как в Spring Data REST.)
При необходимости я мог бы также создать пример проекта для того, о чем я говорю.
1 ответ
Ответьте на вопрос, можно ли вручную указать Spring Auto REST Docs, какие классы использовать для документации:
Spring Auto REST Docs позволяет указать классы запросов и ответов, которые будут использоваться для документации. Это можно сделать с помощью requestBodyAsType и responseBodyAsType. В тесте это выглядит так:
.andDo(document("folderName",
requestFields().requestBodyAsType(Command.class),
responseFields().responseBodyAsType(CommandResult.class)));
Это из теста в примере проекта.