Goa 是在 Go 中构建微服务和 API 的框架,采用独特的设计优先方法。使用前确保有 Go 语言环境。

Goa 1.4.0 距离上个正式版本发布已近一年,在这一年中,Goa 迎来了一些新特性和 Bug 修复。

新特性

Multipart Form Encoding

新增对 HTML 4 规范中描述的 multipart form encoding(也称 multipart/form-data)的原生支持。新的 MultipartForm 函数可用于 action design ,如下所示:

var _ = Resource("profiles", func() {
	Action("submit", func() {
		Routing(POST("profiles"))
		Payload(ProfilePayload)
		MultipartForm() // Uses "multipart/form-data" encoding
		Description("Post accepts a multipart form encoded request")
		Response(OK, ResultMedia)
	})
})

Primitive File Type

新增将有效载荷属性映射到 multipart files 的功能,以便在 goa 中实现文件上传。 新的 File 类型可与 MultipartForm()结合使用,如下所示:

var _ = Resource("profiles", func() {
	Action("submit", func() {
		Routing(POST("profiles"))
		Payload(ProfilePayload)
		MultipartForm() // Uses "multipart/form-data" encoding
		Description("Post accepts a multipart form encoded request")
		Response(OK, ResultMedia)
	})
})

var ProfilePayload = Type("ProfilePayload", func() {
	Attribute("name", String, "Name")
	Attribute("birthday", DateTime, "Birthday")
	Attribute("icon", File, "Icon") // Attribute "icon" contains a file
	Required("name", "birthday", "icon")
})

然后,管理员就可以轻易地访问文件内容,如下所示:

	file, err := ctx.Payload.Icon.Open()
	if err != nil {
		return err
	}
	defer file.Close()
	f, err := os.OpenFile("./icons/"+ctx.Payload.Icon.Filename, os.O_WRONLY|os.O_CREATE, 0666)
	if err != nil {
		return fmt.Errorf("failed to save file: %s", err) // causes a 500 response
	}
	defer f.Close()
	io.Copy(f, file)

Sensitive Headers Suppression

新增可识别本不应由 LogRequest 中间件记录的标头值(header values)的能力。 

middleware.LogRequest(true, "Authorization", "Api-Key", "Owner-Email")

OpenAPI Specification Read-Only Fields

新增指定只读属性的功能, 这些属性在生成的 OpenAPI 规范中标记为只读。

var TypeWithReadOnlyAttributes = Type("Foo", func() {
	Attribute("standard", String)
	Attribute("read-only", String, func() {
		ReadOnly()
	})
})

Support for RFC3339 Date Format

新增对 RFC3339 时间格式的支持。例如 2017-11-16

var TypeWithDate = Type("Foo", func() {
	Attribute("date", String, func() {
		Format("date")
	})
})

Support JWT Authorization via Query String

使客户端可在 HTTP 请求查询字符串参数中提供用于授权的 JWT 认证。

该版本还包含许多 Bug 修复,完整更新内容可查阅:



新闻来源:Goa 1.4.0 发布,Go 语言构建微服务框架