Я передаю "--data" через curl в конечную точку API GraphqQL.
Я хочу иметь возможность передавать данные в «предопределенной» форме, например как в браузере GraphiQL,
{
alpha {
param1
param2
}
}
Атм, мое форматирование внутри данных, а именно возврат re: line, не обрабатывается должным образом.
Эта однострочная форма работает,
curl \
-H 'content-type: application/json' \
-X POST /path/to/graphql/api/endpoint \
--data '{ "query":
"query { alpha {param1, param2} } "
}'
Эта "усовершенствованная" версия не
curl \
-H 'content-type: application/json' \
-X POST /path/to/graphql/api/endpoint \
--data '{ "query":
"query {
alpha {
param1
param2
}
} "
}'
Какой правильный синтаксис для передачи второй формы?
Я предполагаю какую-то комбинацию цитирования / экранирования?

Новые строки просто недопустимы внутри строк JSON. (См. RFC 8259 §7, в котором говорится, что управляющие символы должны быть экранированы.) Вы можете превратить новую строку в \n, но это становится немного громоздким:
curl \
-H 'content-type: application/json' \
-X POST /path/to/graphql/api/endpoint \
--data '{ "query":
"query {\n alpha {\n param1\n param2\n }\n} "
}'
Поскольку запросы JSON довольно хорошо структурированы, кажется, лучше использовать специальный инструмент для отправки запросов GraphQL: автономная версия GraphiQL - нормальный вариант по умолчанию, или, если у вас есть любимый язык сценариев с разумным HTTP-клиентом, это легко достаточно, чтобы написать что-нибудь с этим.
Что-то вроде этого:
QUERY='{ "query":
"query {
alpha {
param1
param2
}
} "
}'
curl \
-H 'content-type: application/json' \
-X POST /path/to/graphql/api/endpoint \
--data "$(echo $QUERY)"
Вот что мне пришлось сделать:
--data "${QUERY//$'\n'/}". Это может работать не во всех случаях, но для моего простого случая использования это сработало.