Как создать фрагмент curl с помощью Spring REST Docs, чтобы использовать двойные кавычки вместо одинарных? - PullRequest
3 голосов
/ 02 октября 2019

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, чтобы использовать двойные кавычки вокруг значения заголовка. Кто-нибудь знает, как это сделать?

1 Ответ

2 голосов
/ 03 октября 2019

Глядя на источник документов весеннего отдыха, одиночные кавычки, заключающие переменные заголовка, жестко запрограммированы в 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:

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

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

...