侦测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 条评论
登录 后参与评论

相关文章

来自专栏思考的代码世界

Python基础学习09天

1516
来自专栏CDN及云技术分享

GDB实现原理和使用范例

这篇文章为了让你深入了解gdb的工作原理,以及如何在linux环境下使用强大的gdb调试程序功能。

4101
来自专栏Python绿色通道

Python的进程

Python实现多进程的方式主要有两种:一种方法是使用os模块中的fork方法; 另一种是使用multiprocessing模块。这两种方法的区别在于前者仅适用...

602
来自专栏指尖下的Android

JNI之路径初探---3

这里讲一下如何拿到类中方法和属性的签名: 1,cmd进入命令行 2,cd 命令切到当前项目的src路径 3,javap -s -p 包名+类名(xxx.x...

873
来自专栏深度学习之tensorflow实战篇

python文件打开方式详解——a、a+、r+、w+区别

第一步 排除文件打开方式错误: r只读,r+读写,不创建 w新建只写,w+新建读写,二者都会将文件内容清零 (以w方式打开,不能读出。w+可读写) **w+与r...

4357
来自专栏Petrichor的专栏

AttributeError: 'module' object has no attribute 'fullmatch'.

经过查找,发现出错的原因是 re库 中的 fullmatch函数 是 在py3.4之后才新添加的 。

1953
来自专栏猿人谷

经典C语言面试题

1.gets()函数 问:请找出下面代码里的问题: #include<stdio.h> int main(void)  {  char buff[10]; ...

5835
来自专栏java一日一条

深入分析Java线程中断机制

在平时的开发过程中,相信都会使用到多线程,在使用多线程时,大家也会遇到各种各样的问题,今天我们就来说说一个多线程的问题——线程中断。在java中启动线程非常容易...

482
来自专栏前端布道

MongoDB初识

什么是MongoDB MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。 在高负载的情况下,添加更多的节点,可以保证服务器性能。 ...

3668
来自专栏Ryan Miao

java线程(1)--概念基础

参考:http://lavasoft.blog.51cto.com/62575/99150 http://blog.csdn.net/baby_newstar/...

3188

扫码关注云+社区