Как получить текстовый ответ от бессерверной функции ibm?

Я хочу использовать бессерверную функцию для генерации (и предоставления через URL-адрес) вывода в формате CSV. С документация я так понимаю что это может быть достигнуто с помощью тега --response-type text. Однако мне это не удается.

Мой код - это скрипт hello.py

def main(args):
    text = '1,2,3'
    # json = {'a': [1,2,3]}
    response = text
    return response

(Обратите внимание на использование переменных text или json для возврата правильного формата, в зависимости от тега --response-type, используемого для создания функции.)

Я создаю функцию следующим образом:

ibmcloud wsk action delete hello
ibmcloud wsk action create hello hello.py --web true
ibmcloud wsk api create /hello get hello --response-type text

Откуда я получаю URL: https://service.us.apiconnect.ibmcloud.com/gws/apigateway/api/<GENERATED_API_ID>/hello

Но как только я нажимаю URL-адрес, я получаю сообщение об ошибке:

{
  "error": "There was an error processing your request.",
  "code": "35976969ecfff22ab15b274a5a56e45b"
}

Если вместо этого я возвращаю json из функции и создаю функцию с помощью --response-type json, тогда все работает как положено, и я получаю красивый JSON в браузере.

Кто-нибудь знает, что может происходить?

Примечание 1. Ответ будет получен службой, которая не позволяет (легко) обрабатывать JSON, и оттуда мне нужен формат CSV.

Примечание 2: я нашел эта ветка для очень похожей темы и потенциальное решение. Однако я не вижу, как это реализовать или использовать в моем случае.

Спасибо всем заранее,

Мануэль

0
0
101
1

Ответы 1

Функция всегда должна возвращать объект JSON (словарь Python). Если вы предоставляете функцию как конечную точку API, а именно веб-действие openwhisk, вы можете вернуть следующий ответ: return { body: text }

Обратитесь к документации для получения более подробной информации https://github.com/apache/incubator-openwhisk/blob/master/docs/webactions.md

Есть идеи, в чем тогда цель --response-type TEXT? Спасибо за ответ.

Manu 10.08.2018 19:09

Флаг --response-type управляет целевым URL-адресом веб-действия, которое будет проксироваться API-шлюзом. Например, когда вы используете текстовый флаг --response-type, полный результат действия возвращается в формате ТЕКСТ, а к URL-адресу веб-действия добавляется текст. См. Расширения содержимого здесь github.com/apache/incubator-openwhisk/blob/master/docs/….

user6062970 20.08.2018 16:28

Другие вопросы по теме