我已经写了关于OpenWhisk的web actions,以及它们是如何允许你去调用main()方法返回一个数组的键状态,标题和正文来向客户端发送一个状态码和HTTP头的:
func main (args : String :Any ) - > String :Any {
return [
"body" : “<root> Hello world </ root>” ,
"code" : 200 ,
"headers" : [
“Content-Type” : “text / xml” ,
],
]
}
如果此测试操作位于默认命名空间中,那么我们将其创建 为启用web action支持并通过curl访问它:wsk action update test
test.swift -a web-export true
curl https://openwhisk.ng.bluemix.net/api/v1/experimental/web/19FT_dev/default/test.http
<root> Hello world </ root>
然而,当你通过认证的POST API(例如via curl或者wsk action invoke)调用这个函数时,你会看到:
$ AUTH = $(wsk property get --auth | awk'{printf(“%s”,$ 3 )} | | openssl base64 | tr -d“\ n”)
$ curl -X POST -H "Authorization:Basic$ AUTH ” \
“https://openwhisk.ng.bluemix.net/api/v1/namespaces/19FT_dev/actions/test?blocking=true&result=true”
{
"body":“<root> Hello world </ root>",
"code":200,
“headers”:{
“Content-Type”:“text / xml”
}
}
这是可以预料到的,因为经过验证的POST API调用只是执行操作并返回它返回的内容。
当您的操作被称为Web action时,则会有另外的参数不会以其他方式显示。我们可以简单地寻找其中之一。具体来说,我选择查找__ow_meta_verb。
很简单的方法:
func main (args : String :Any ) - > String :Any {
if args [ “\_\_ow\_meta\_verb” ] = = nil {
return [ “root” : “Hello world” ]
}
return [
“body” : “<root> Hello world </ root>” ,
“code” : 200 ,
“headers” : [
“Content-Type” : “text / xml” ,
],
]
}
请注意,我们返回一个数组,因为认证的POST API调用需要这个。通过curl内部调用:
$ curl -X POST -H “Authorization:Basic$ AUTH ” \
“https://openwhisk.ng.bluemix.net/api/v1/namespaces/19FT_dev/actions/test?blocking=true&result=true”
{
“root”:“Hello world”
}
(我们只能通过这种方式获得JSON)
当然,调用web action并没有改变,我们仍然可以得到我们的XML。
我们可以用适当的机制调用我们的函数,并产生正确的响应。