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 修复,完整更新内容可查阅:
转自 https://www.oschina.net/news/98096/goa-1-4-0-released