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

相关文章

来自专栏AndroidTv

前端入门6-JavaScript客户端api&jQuery

作为一个前端小白,入门跟着这四个来源学习,感谢作者的分享,在其基础上,通过自己的理解,梳理出的知识点,或许有遗漏,或许有些理解是错误的,如有发现,欢迎指点下。

854
来自专栏NetCore

struts技术的logic标签

struts技术的logic标签-- - 开源项目最好的是可以让我们从项目的源码本身角度看项目,通过对源码的了解更多的是对设计思想融会贯通达提升整体能力的目的。...

1788
来自专栏偏前端工程师的驿站

HTML语义化:HTML5新标签——template

一、前言                                 当我们使用String-base的模板引擎(如Handlebars.js等)时,要么就...

2309
来自专栏Java帮帮-微信公众号-技术文章全总结

JSP简单入门(1)

JSP页面中可以包含模板元素、脚本元素、EL表达式、注释、指令、和行为元素(JSP标签)等内容。有三种类型的脚本元素:JSP脚本片断、JSP表达式和JSP声明,...

35311
来自专栏闻道于事

JavaWeb(七)Cookie,EL表达式,标准标签库

Cookie Cookie概述 Cookie译为小型文本文件或小甜饼,Web应用程序利用Cookie在客户端缓存服务器端文件。Cookie是以键值对形式存储在客...

3096
来自专栏前端知识分享

第75天:jQuery中DOM操作

还有就是,我说的是name属性,上面例子中的 type属性,是可以用attr的。

612
来自专栏Web 开发

Framework7源码学习-1-概览

https://raw.githubusercontent.com/qq286735628/Framework7/master/dist/js/framewor...

890
来自专栏每日一篇技术文章

微信小程序_06 将臃肿的单页js文件拆开

小程序中每一个页面对应一个Page()方法,我们需要把变量和组件的各种事件都写在一个对象里,然后把对象作为这个参数传递给Page方法

762
来自专栏与神兽党一起成长

unslider源码分析

根据Bootstrap中文网的介绍,Unslider一个超小的 jQuery轮播(slider)插件,参照这个汉化版的介绍页面,这个插件有你需要的优点,但是本...

771
来自专栏最高权限比特流

POST和GET方法乱码解决方案

2154

扫码关注云+社区