Как вы пишете доки к API приложения? Какие средства используете? Документация актуальна? Часто для документирования HTTP API используется swagger, простой и понятный инструмент, но сегодня мы поговорим о чем-то чуть более сложном, о чем-то чуть более продвинутом, а именно о Spring REST Docs. Довольно удивительно, что в разных кругах REST обозначает не сколько стиль архитектуры, сколько, в принципе, использование HTTP для построения API приложения. Spring Rest Docs (SRD) - это один из проектов Spring, который позволяет писать документацию к вашим REST сервисам и вот каким образом. Знакомы с TDD? Успели полюбить написание тестов? Здесь это пригодится. Документация в проекте SRD генерируется на основе написанных вами тестов. Как это выглядит?
Упрощенно, процесс следующий: пишем тест -> запускаем его -> генерируется сниппет в формате asciidoctor -> сниппет компилируется в html/pdf/другие форматы.
Тест для Spring Boot выглядит следующим образом. Вы конфигурируете объект MockMvc, например, так (JUnit 5)
SpringBootTest @ExtendWith({RestDocumentationExtension.class, SpringExtension.class}) public class SampleJUnit5ApplicationTests { @Autowired private WebApplicationContext context; private MockMvc mockMvc; @BeforeEach public void setUp(RestDocumentationExtension restDocumentation) { this.mockMvc = MockMvcBuilders .webAppContextSetup(context).apply( documentationConfiguration( restDocumentation)) .build(); } ... }
Затем с его помощью пишите тест, например, так
Test public void sample() throws Exception { this.mockMvc.perform(get("/")) .andExpect(status().isOk()) .andDo(document("sample")); }
В результате у вас генерируются сниппеты, которые складываются в определенную папку в проекте, а уже из сниппетов генерируется документация. Какие я здесь вижу плюсы:
- документация всегда актуальна и есть пример запуска в виде теста;
- покрытие тестов неизменно растёт;
- навязывание TDD;
- документирование смешивается с тестированием (хотя, может быть это не минус).
Ниже дал ссылки, где можно почитать подробнее, если вы заинтересовались.
Немає коментарів:
Дописати коментар