Как создать фрагмент завитка с помощью Spring REST Docs, чтобы использовать двойные кавычки вместо одинарных?

Spring REST Docs — очень хороший способ создать актуальную документацию по API. Он также генерирует фрагменты кода из вашего тестового кода, которые вы можете вставить в свою документацию по API. Когда пользователь вашего API читает вашу документацию, он может легко скопировать и вставить фрагменты в свой терминал и выполнить его.

В настоящее время он генерирует фрагменты, используя одинарные кавычки вокруг строковых значений:

$ curl 'https://some.url.com/teams' -i -X POST -H 'Content-Type: application/json' 
-H 'Accept: application/hal+json' -H 'Authorization: Bearer $TOKEN'
-d '{
  "description" : "Test Team"
}'

В сгенерированном выше запросе curl $TOKEN будет переменной окружения, но из-за одинарных кавычек подстановка переменных не сработает. Вот почему я хотел бы каким-то образом настроить Spring REST Docs для использования двойных кавычек вокруг значения заголовка. Кто-нибудь знает, как это сделать?


person Karel    schedule 02.10.2019    source источник


Ответы (1)


Глядя на источник для документов весеннего отдыха, одинарные кавычки, обертывающие переменные заголовка, жестко закодированы в CurlRequestSnippet, и я не вижу простого способа расширить/переопределить это поведение - https://github.com/spring-projects/spring-restdocs/blob/master/spring-restdocs-core/src/main/java/org/springframework/restdocs/cli/CurlRequestSnippet.java#L148

Но вы можете закончить одинарную кавычку, заключить переменную $TOKEN в двойные кавычки, а затем перезапустить одинарную кавычку, например: header("Authorization", "Bearer '\"$TOKEN\"'"))

Больше контекста для примера теста с заменой переменной:

this.mockMvc.perform(get("/").header("Authorization", "Bearer '\"$TOKEN\"'"))
                    .andDo(print()).andExpect(status().isOk())
                .andExpect(content().string(containsString("Hello World")))
                .andDo(document("home"));

Что генерирует фрагмент завитка:

$ curl 'http://localhost:8080/' -i -X GET 
    -H 'Authorization: Bearer '"$TOKEN"''

Не так красиво, но когда этот фрагмент выполняется, подстановка переменной bash работает.

person camtastic    schedule 03.10.2019
comment
Спасибо за ваш ответ, это работает для меня. Было бы лучше, если бы команда Spring использовала двойные кавычки в CurlRequestSnippet или это можно было бы настроить, но у них может быть причина, по которой они жестко запрограммировали одинарные кавычки в каждом из своих методов writer класса CurlRequestSnippet. - person Karel; 03.10.2019
comment
@Karel Я член команды Spring и руководитель Spring REST Docs. Насчет цитат согласен. Не могли бы вы открыть задачу, чтобы мы могли внести улучшения здесь ? - person Andy Wilkinson; 03.10.2019
comment
@AndyWilkinson Спасибо за ваш комментарий. Извините за столь поздний ответ. Я создал задачу на github: github.com/spring-projects/spring-restdocs /вопросы/650. Надеюсь, я последовал соглашению вашей команды о том, как создавать и описывать задачи. - person Karel; 15.10.2019
comment
@Karel Спасибо, что открыли проблему. - person Andy Wilkinson; 15.10.2019