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

相关文章

来自专栏流浪猫的golang

golang与redis的基本使用

上面是golang 连接redis 的基本代码。连接redis 数据库 方式跟net包连接网络方式样子很想。 认证:如果redis 有密码 ,在连接成功后必...

892
来自专栏PHP技术

YII运行原理

应用执行流程: 浏览器向服务器发送 Http Request | 控制器(protected/controllers) | |—> Action | 创建模型 ...

3166
来自专栏spring源码深度学习

重拾python爬虫之urllib

学习一门技术,总是要踩好多坑,然后收货一大堆疑惑,这么多相似的方式该学哪个呢?外面公司常用的是哪个呢? 就比如python爬虫,可以作为网络请求的方式有四种,...

762
来自专栏BaronTalk

Java8新特性第2章(接口默认方法)

在Java中一个接口一旦发布就已经被定型,除非我们能够一次性的更新所有该接口的实现,否者在接口的添加新方法将会破坏现有接口的实现。默认方法就是为了解决这一问题的...

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

python3 django整理(七) Django 从后台往前台传递数据时有多种方法可以实现。

Django 从后台往前台传递数据时有多种方法可以实现。 基础形式: from django.shortcuts import render def main...

2768
来自专栏Java3y

SpringMVC【参数绑定、数据回显、文件上传】

前言 本文主要讲解的知识点如下: 参数绑定 数据回显 文件上传 参数绑定 我们在Controller使用方法参数接收值,就是把web端的值给接收到Control...

37610
来自专栏Python中文社区

网络爬虫框架Scrapy详解之Request

Request类是一个http请求的类,对于爬虫而言是一个很重要的类。通常在Spider中创建这样的一个请求,在Downloader中执行这样的一个请求。同时也...

730
来自专栏大内老A

了解ASP.NET MVC几种ActionResult的本质:FileResult

FileResult是一个基于文件的ActionResult,利用FileResult我们可以很容易地将从某个物理文件的内容响应给客户端。ASP.NET MVC...

17510
来自专栏上善若水

007互联网相关之http文件下载及断点续传

所谓断点续传,也就是要从文件已经下载的地方开始继续下载。在以前版本的 HTTP 协议是不支持断点的,HTTP/1.1 开始就支持了。一般断点下载时才用到 Ran...

572
来自专栏desperate633

Python爬虫之requests库入门requests库的get方法理解requests库的异常爬去网页通用的代码框架resquests库主要方法的解析

网络爬虫就是提取网页的信息。 网络爬虫的原则就是谨记“the website is API”,就是我们所面对的对象和信息来源都是各个website。现在pyt...

593

扫码关注云+社区