Вот небольшой совет для вас. Если вы создаете действие 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 г.