侦测OpenWhisk的Web操作

我之前写过关于OpenWhisk的Web操作的文章,阐述了它们到底是如何允许你向客户端发送状态码和HTTP头,

并且通过如下的main()方法来返回一个带有关键状态码,heads头部和body正文部分的响应包的:

func main(args: [String:Any]) -> [String:Any] {
    return [
        "body": "<root>Hello world</root>",
        "code": 200,
        "headers": [
            "Content-Type": "text/xml",
        ],
    ]
}

如果此测试操作位于默认命名空间中,那么我们为其创建

wsk action update test test.swift -a web-export true

来启用Web操作支持并通过curl访问它:

curl https://openwhisk.ng.bluemix.net/api/v1/experimental/web/19FT_dev/default/test.http
 
<root>Hello world</root>

但是,当你借助于有效的POST API(例如通过curl或者wsk action invoke方法)来调用这个函数时,你会得到:

$ 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操作中的附加参数

当您的操作以Web操作的形式被调用时,则其他额外的参数不会加以显示。我们可以简单地寻找其中之一。举个例子,比如我选择查找__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操作并没有改变,我们仍然能够得到XML数据。

我们还可以通过适当的途径调用我们的函数,来得到正确的响应。

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏java工会

超全超简洁SSM知识点总结

18610
来自专栏大内老A

ASP.NET MVC下的四种验证编程方式

ASP.NET MVC采用Model绑定为目标Action生成了相应的参数列表,但是在真正执行目标Action方法之前,还需要对绑定的参数实施验证以确保其有效性...

1977
来自专栏技术小讲堂

在ASP.NET MVC中使用Unity进行依赖注入的三种方式第一种方法第二种方法第三种方法

     在ASP.NET MVC4中,为了在解开Controller和Model的耦合,我们通常需要在Controller激活系统中引入IoC,用于处理用户请...

2675
来自专栏爱撒谎的男孩

struts核心配置文件详解(result配置)

<package name="Login" extends="struts-default" namespace="/"> ​ <action name...

3375
来自专栏WindCoder

Jquery控制input与selected

当以form表单提交,diabled时无法获取数值,readonly可以获取到数值。

431
来自专栏vue学习

关于vue的命名规范

1165
来自专栏布尔

金格科技iMsg2000消息数据格式

本文介绍的是金格科技iweboffice2003控件前端向服务器发请求后服务器解析数据流的过程,从中也可以了解其前端对数据的封装过程,不复杂很简单,挺不错的数据...

1786
来自专栏前端架构

再唠叨JS模块化加载之CommonJS、AMD、CMD、ES6

Javascript模块化编程,已经成为一个迫切的需求。理想情况下,开发者只需要实现核心的业务逻辑,其他都可以加载别人已经写好的模块。

823
来自专栏GreenLeaves

JS框架设计之加载器所在路径的探知一模块加载系统

1、要加载一个模块,我们需要一个URL作为加载地址,一个script作为加载媒介,但用户在require是都用ID,我们需要一个将ID转换为URL的方法,思路很...

1795
来自专栏GreenLeaves

Jquery ajax调用后台aspx后台文件方法(不是ashx)

在asp.net webForm开发中,用Jquery ajax调用aspx页面的方法常用的有两种:下面我来简单介绍一下。   (1)通过aspx.cs的静态方...

1845

扫码关注云+社区