更新时间:2025-04-24 GMT+08:00

开发HTTP函数

本章节介绍使用Go运行时开发HTTP函数,更多HTTP详情,请参见创建HTTP函数

约束与限制

  • HTTP函数只能绑定APIG/APIC触发器,根据函数和APIG/APIC之间的转发协议。

    函数的返回合法的http响应报文中必须包含body(String)、statusCode(int)、headers(Map)和isBase64Encoded(boolean),HTTP函数会默认对返回结果做Base64编码,isBase64Encoded默认为true,其它框架同理。相关约束条件请参考Base64解码和返回结构体的说明

  • HTTP函数默认开放端口为8000。
  • Context类中提供了许多上下文方法供用户使用,其声明和功能请参见表1

使用Go开发HTTP函数示例

示例概述:

由于HTTP函数本身不支持Go语言直接代码部署,因此本示例将以转换成二进制的方式为例,将Go编写的程序部署到FunctionGraph上。

操作步骤:

具体操作步骤请参见使用Go构建FunctionGraph HTTP函数

代码示例

源文件main.go的代码内容如下,可参考使用:

// main.go
package main

import (
	"fmt"
	"net/http"

	"github.com/emicklei/go-restful"
)

func registerServer() {
	fmt.Println("Running a Go Http server at localhost:8000/")

	ws := new(restful.WebService)
	ws.Path("/")

	ws.Route(ws.GET("/hello").To(Hello))
	c := restful.DefaultContainer
	c.Add(ws)
	fmt.Println(http.ListenAndServe(":8000", c))
}

func Hello(req *restful.Request, resp *restful.Response) {
	resp.Write([]byte("nice to meet you"))
}

func main() {
	registerServer()
}
# bootstrap
/opt/function/code/go-http-demo

在main.go中,使用8000端口启动了一个HTTP服务器,并注册了path为/hello的API,调用该API将返回"nice to meet you"。

编译打包

  1. 在linux机器下,将上述代码进行编译:go build -o go-http-demo main.go。
  2. 将go-http-demo和bootstrap打包为xxx.zip。

创建HTTP函数

在FunctionGraph函数工作流中新建一个HTTP函数,然后上传刚才打包的xxx.zip代码。

创建APIG触发器

新建一个APIG触发器,选择一个合适的分组和发布环境后,直接确认即可(测试阶段可以不用安全认证,即为None)。

图1 APIG触发器创建

调用测试

创建APIG触发器中生成的调用URL+代码中注册的path/hello复制到浏览器地址栏,可以看到页面返回结果如下:

图2 返回结果