Вот небольшой совет для вас. Если вы создаете действие OpenWhisk, которое планируете представить как веб-действие, скорее всего, вы захотите рассмотреть возможность включения CORS, чтобы вы могли вызывать свой код из JavaScript во внешнем интерфейсе. Поскольку веб-действия могут возвращать как результат, так и заголовки, сделать это несложно. Вот простой пример.

function main(args) {

    if(!args.name) args.name = 'Nameless';
    let result = {
        string:'Hello '+args.name
    }

    return {
        headers: { 
            'Access-Control-Allow-Origin':'*',
            'Content-Type':'application/json'
        }, 
        statusCode:200,
        body: new Buffer(JSON.stringify(result)).toString('base64')
    }

}

Здесь нужно отметить две вещи. Во-первых, очевидно, это заголовок Access-Control-Allow-Origin. Я использую *, что означает, что его можно вызывать из любого места, но я могу заблокировать его, если захочу.

Наконец, когда вы возвращаете свои данные, вы должны закодировать их в base64. Таким образом, ключ body обрабатывает все это после того, как я создал свое значение result, как мне нравится.

Конечным результатом является простая конечная точка, которую я могу получить из некоторого кода на стороне клиента:

$.getJSON('https://openwhisk.ng.bluemix.net/api/v1/web/[email protected]_My%20Space/corstest/corstest.http?name=ray')
.then(function(res) {
    console.log(res);
});

Я также думаю, что было бы правильно построить это как последовательность. Таким образом, вы можете использовать webFoo как действие, состоящее из последовательности foo + webify (или что-то подобное), где foo представляет реальную бизнес-логику, а webify обрабатывает «сложный» вывод, необходимый для возврата результата.

Спасибо @akrabat на OpenWhisk Slack за помощь в этом!

Первоначально опубликовано на сайте www.raymondcamden.com 18 апреля 2017 г.