检测OpenWhisk Web操作

我已经写了关于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中的其他参数

当您的操作被称为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。

我们可以用适当的机制调用我们的函数,并产生正确的响应。

本文的版权归 古玉修 所有,如需转载请联系作者。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java面试笔试题

Error和Exception有什么区别?(还在总结)

Error表示系统级的错误和程序不必处理的异常,是恢复不是不可能但很困难的情况下的一种严重问题;比如内存溢出,不可能指望程序能处理这样的情况;Except...

702
来自专栏二进制文集

Struts1 和 Struts2 对比

参考链接:http://blog.csdn.net/john2522/article/details/7436307

502
来自专栏游戏杂谈

nginx配置文件防盗链

一般网站为了防止资源被外部链接所盗用,都会使用防盗链来进行处理。思路就是判断请求的域名 如下一个相对完全的示例:

742
来自专栏java一日一条

Java Socket 编程原理及教程

对于Java Socket编程而言,有两个概念,一个是ServerSocket,一个是Socket。服务端和客户端之间通过Socket建立连接,之后它们就可以进...

441
来自专栏行者常至

hibernate的工作原理

可以实现id自动增加,也就是说,如果往数据库中插入一个name,那么id就自动加1。

652
来自专栏Pythonista

初识Django

框架,即framework,特制为解决一个开放性问题而设计的具有一定约束性的支撑结构,使用框架可以帮你快速开发特定的系统。

951
来自专栏Java进阶架构师

手把手带你实现JDK动态代理

业务接口Interface、业务实现类target、业务处理类Handler、JVM在内存中生成的动态代理类$Proxy0

671
来自专栏xingoo, 一个梦想做发明家的程序员

JSP中文乱码问题

之前总是碰到JSP页面乱码的问题,每次都是现在网上搜,然后胡乱改,改完也不明白原因。 这次正好作下总结,中文乱码就是因为编码不符,可能出现乱码有四个地方: ...

2329
来自专栏性能与架构

Javascript promise 模式是什么?

什么promise模式 先看一个场景 ? A 中执行了ajax请求,在回调函数中调用了B,B 中又是一个ajax请求 这种代码方式会有问题 (1)可读性太...

2487
来自专栏python学习之旅

Python笔记(十二):操作数据库

(一)      前言     本文说明如何连接Oracle、MySQL、sqlserver,以及执行sql、获取查询结果等。 (二)      DB-API ...

3529

扫码关注云+社区